nginx虛擬主機

配置位置

既可以在七層代理層配置,又可以在業務邏輯層配置。但七層代理層配置的虛擬主機常配合nginx的ngx_http_proxy_module模塊使用。 而業務邏輯層配置的虛擬主機常配合nginx的ngx_http_fastcgi_module模塊使用。

虛擬主機定義

虛擬主機指的是在單一機器上運行多個網站(例如 company1.xqwin.com 和 company2.xqwin.com)。虛擬主機可以是"基於 IP"的,即每個IP一個站點;或者是"基於域名"的,即每個域名一個站點。這些站點運行在同一物理服務器上,對用戶不會有任何感知。Nginx也可以配置多種類型的虛擬主機: 基於IP的虛擬主機、基於端口的虛擬主機、基於域名的虛擬主機。下面將分別介紹這些虛擬主機的配置,及優缺點。

1、基於IP的虛擬主機

可以在一塊物理網卡上綁定多個IP地址,這是實現基於IP虛擬主機的前提。
缺點:

配置複雜,運維過程中,不但要關注Nginx 本身的配置、同時也要關注網卡的特殊配置。
在公網IP地址資源比較稀缺的情況下,使用基於IP地址的虛擬主機是一種不切實際的想法。
基於IP地址的虛擬主機,訪問的時候需要使用IP地址:端口(默認80不需要寫)去訪問,在使用上也不是很友好。

實例配置

首先在服務器的網卡上綁定多個IP地址

# ifconfig
# ifconfig eth0:1 192.168.122.189 broadcast 192.168.122.255 netmask 255.255.255.0 up
# route add -host 192.168.122.189 dev eth0:1
# ifconfig eth0:2 192.168.122.190 broadcast 192.168.122.255 netmask 255.255.255.0 up
# route add -host 192.168.122.190 dev eth0:2
# ifconfig
從另外一臺服務器ping 192.168.122.189和192.168.122.190兩個IP,如果能夠Ping通,則證明配置無誤。但是通過
ifconfig和route配置的IP別名在服務器重啓後會消失,若需要永久生效,可以將這兩條ifconng和route命令添加到
/etc/rc.local文件中讓系統開機時自動運行。

 

 具體Nginx 上的配置

# cat 192.168.122.189.conf
server {
    listen 192.168.122.189:80;
    server_name 192.168.122.189:80;
    root /data0/www/htdocs/www.blog.xqwin.com;
}
# cat 192.168.122.190.conf
server {
    listen 192.168.122.190:80;
    server_name 192.168.122.190:80;
    root /data0/www/htdocs/www.bbs.xqwin.com;
}

 測試

# echo "hello" > /data0/www/htdocs/www.blog.xqwin.com/html.html
# curl http://192.168.122.189/hello.html
hello
# echo "world" > /data0/www/htdocs/www.bbs.xqwin.com/html.html
# curl http://192.168.122.190/hello.html
world

2、 基於端口的虛擬主機

基於端口的虛擬主機配置,使用端口來區分,瀏覽器使用域名或IP地址:端口號訪問。
缺點: 虛擬主機使用端口去做區分,導致HTTP協議不標準(標準HTTP協議爲 80端口)。業務調用方必須要知道業務開啓的端口。
且一旦端口改變,調用方和被調用方都需要進行調整。

實例配置

# cat www.blog.xqwin.com.conf
server {
    listen 8080;
    server_name www.blog.xqwin.com;
    root /data0/www/htdocs/www.blog.xqwin.com;
}

# cat www.bbs.xqwin.com.conf
server {
    listen 9090;
    server_name www.bbs.xqwin.com;
    root /data0/www/htdocs/www.bbs.xqwin.com
}

測試

# /usr/local/nginx/sbin/nginx -s stop
# /usr/local/nginx/sbin/nginx
# curl http://127.0.0.1:8080/hello.html
hello
# curl http://127.0.0.1:9090/hello.html
world

 3、基於域名的虛擬主機

基於域名的虛擬主機是最常見的一種虛擬主機。只需配置DNS服務器,將每個主機名映射到正確的lP地址。然後配置Nginx
服務器,令其識別不同的主機名就可以了。這種虛擬主機技術使很多虛擬主機可以共享同一個lP地址,有效解決了lP地址
不足的問題。在沒有特殊要求必須用一個基於IP的虛擬主機或基於端口的虛擬主機時,最好還是使用基於域名的虛擬主
機。
優點:
所有虛擬主機使用同一個端口,彌補了基於端口虛擬主機的缺陷
所有虛擬主機使用同一個IP地址,彌補了基於IP虛擬主機的缺陷

實例配置

# cat www.blog.xqwin.com.conf
server {
    listen 80;
    server_name www.blog.xqwin.com;
    root /data0/www/htdocs/www.blog.xqwin.com;
}

# cat www.bbs.xqwin.com.conf
    server {
    listen 80;
    server_name www.bbs.xqwin.com;
    root /data0/www/htdocs/www.bbs.xqwin.com;
}

測試

# curl http://127.0.0.1/hello.html -H "HOST: www.blog.xqwin.com"
hello
# curl http://127.0.0.1/hello.html -H "HOST: www.bbs.xqwin.com"
world

4、設置默認虛擬主機

默認虛擬主機就是配置文件裏的第一個虛擬主機。關於默認虛擬主機有個特點,凡是解析到這臺機器的域名,不管是什麼
域名,只要在配置文件中沒有配置,那麼都會訪問到這個虛擬主機上來。也就是說默認虛擬主機是一個兜底的虛擬主機。
在Nginx中若不指定默認虛擬主機,同樣配置文件中的第一個虛擬主機將會是默認虛擬主機。若手動指定虛擬主機應該怎
樣去配置呢?

實例配置

server {
    listen 80 default_server; #說明是默認虛擬主機。
    server_name _ ; #虛擬主機沒有域名,爲空。
    root /data0/www/htdocs/default;
    access_log /data0/www/logs/default-access_log main;
    error_log /data0/www/logs/default-error_log;
    # 將所有的未知請求,都導流到 xqwin.com 服務上。
    rewrite ^/(.*) http://xqwin.com/$1 permanent;
}

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章