Nginx – 設定虛擬主機 (Virtual Host) 的方式
目前的需求狀況是,兩個網域要指向同一個 IP 的設定。
範例
- imjsn.com 指向 A主機 127.0.0.1
- www.imjsn.com 也要指向 A主機 127.0.0.1。
雲端主機是 CenterOS 6.5。
假設 jsn 是我的帳號名稱。注意,有些主機不叫做 vhost.conf 可能會叫做 virtual.conf 之類。
網頁路徑
1 2 3 |
/virtualhost/jsn/網頁都放在這底下,如 index.html |
每台主機設定都有差異,多數會放置在如
1 2 3 |
/var/www/html/這裡 |
就看你怎麼去自行設定。
統一設定檔
1 2 3 |
/usr/local/nginx/conf/vhost.conf |
這裡面可能會出現 include 這樣的關鍵字,用來引用它處的設定檔,這是為了方便分門別類管理。當遇到不同的網域或網址,會採用不同的設定檔。
1 2 3 4 |
include /usr/local/nginx/conf/vhost/imjsn/imjsn.c53196; // 可能是預設的。這裡引用沒有 www 的設定檔。後面的 c53196 大概是我這邊系統自己產生添加的亂數編號。 include /usr/local/nginx/conf/vhost/www.imjsn/www.imjsn.c53196; // 這裡引用有 www 的網域設定。因為這是我自己添加的,所以我接著要到 vhost 底下自己建立一個路徑 /www.imjsn/ |
*這個方法是分開各自的設定檔。有些作法是寫在同一個檔案裡;分開來我覺得是比較好懂比較不凌亂。
各別設定檔 (每個網域都一個)
imjsn.com 設定在此 (我雲端主機設定好一開始就有的):
1 2 3 |
/usr/local/nginx/conf/vhost/imjsn/imjsn.c53196; |
www.imjsn.com 設定在此:
1 2 3 |
/usr/local/nginx/conf/vhost/www.imjsn/www.imjsn.c53196 |
如果我打算將 www.mjson.com 導向到 imjsn.com 就會長這樣
imjsn.c53196
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
server { location ~ ^(.+\.php)(.*)$ { fastcgi_pass 127.0.0.1:7027 ; include fastcgi.conf ; } root /virtualhost/imjsn; access_log /usr/local/nginx/logs/imjsn-imjsn.c53196 yundns_log ; index index.php default.php index.htm default.html index.html ; server_name imjsn.com ; location ~ \.(mdf|sql|bak)$ { return 404 ; } } |
www.imjsn.c53196
1 2 3 4 5 6 7 8 9 |
server { server_name www.imyolo.com ; rewrite ^/(.*) http://imyolo.com/$1 permanent; } |
如果你想讓 IP (如 21.216.11.111 ) 也能自動導向到 imjsn.com ,那也是使用這樣的設定,只要多增加一個就好了。 這樣統一個對外的網域,在 SEO 與流量上會比較有利喔!
解釋
- server_name : 輸入設定的網域名稱
- rewrite : 輸入對應的網域名稱
- access_log : 輸入access_log 的存放路徑
- error_log : 輸入error_log 的存放路徑
- root : 設定此網域的網頁資料所存放的地方
- index : 設定首頁能讀的項目