在3.17日的時候已經寫過一篇關於apahce的基於域名、端口、ip地址3種方式的虛擬主機實現。原理是同樣的,如今記錄nginx的虛擬主機這三種方式的實現。
php
系統版本爲rhel5.6,nginx版本爲1.1.6。
html
1.基於域名:
nginx
基於域名的方式,要先有dns服務器,這裏爲了方便,能夠在/etc/hosts文件裏面配置,把它當成dns就好了,能夠參考3.17日那篇博客關於dns的配置或者其餘博文也有。這裏關於nginx的安裝也略去。web
[root@nginx ~]# cat /etc/hosts ///在hosts文件中添加www.xiaowei_1.com、www.xiaowei_2.com兩條域名瀏覽器
# Do not remove the following line, or various programs服務器
# that require network functionality will fail.併發
127.0.0.1localhost.localdomain localhostapp
::1localhost6.localdomain6 localhost6dom
10.10.16.29www.xiaowei_1.comcurl
10.10.16.29www.xiaowei_2.com
[root@nginx conf]# cp nginx.conf nginx.conf_bak ///備份nginx配置文件
[root@nginx conf]# cat nginx.conf
user nobody;
worker_processes 1; ///worker進程輕易不要調,不然會出問題,worker進程數不要大於cpu核數,這裏的worker進程數調成了多少,對應的nginx就會生成多少worker進程。
error_log logs/error.log;
pid logs/nginx.pid;
events {
worker_connections 1024; ///每一個進程最大的鏈接數,能夠適當調高一點,最大值是65535,nginx最終的併發鏈接數是這裏的每一個進程鏈接數乘以上面的worker進程數目
use epoll; ///使用epoll模式,nginx的強大最主要得益於用了epoll模式,固然nginx之因此牛逼最主要得益於它被用作了反向代理,(用作web服務器也很牛)。
}
http { ///將虛擬主機放到http節點裏面,能夠把配置文件所有放到http節點裏面,也能夠把虛擬主機的配置文件獨立成一個配置文件,在http節點引用它,這裏我選擇了後者。
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
include extra/virtualhost.conf; ///我把虛擬主機的配置文件獨立成virtualhost.conf,這個文件在extra目錄裏面,即這個文件放的位置是/usr/local/nginx/conf/extra/virtualhost.conf。
}
說明:實際生產中在nginx.conf的主配置文件中還能夠添加其餘配置信息,如添加gzip壓縮配置、日誌格式等等配置信息(優化配置),這裏個人上面配置信息已經夠用的了,有機會再貼出來並解釋比較全的nginx配置文件。
如今要在/usr/local/nginx/conf目錄下面建立extra目錄,並在extra目錄裏面建立virtualhost.conf文件。
[root@nginx conf]# mkdir extra
[root@nginx extra]# cat virtualhost.conf ///這裏我作了兩個虛擬主機,分別是剛剛在hosts文件中配置的www.xiaowei_1.com域名和www.xiaowei_2.com域名。
server {
listen 80; ///監聽主機中全部的80端口
server_name www.xiaowei_1.com; ///定義客戶端要訪問網站用到的域名
location / {
root html/xiaowei_1; ///定義網站www.xiaowei_1.com所在的位置,即在/usr/local/nginx/html/xiaowei_1目錄裏面。
index index.html index.php; ///定義索引文件,能夠多加幾個
}
}
server {
listen 80;
server_name www.xiaowei_2.com;
location / {
root html/xiaowei_2;
index index.html index.php;
}
}
[root@nginx html]# mkdir xiaowei_1 xiaowei_2
[root@nginx xiaowei_1]# cat index.html ///配置網站www.xiaowei_1.com的主頁
11111
[root@nginx xiaowei_2]# cat index.html
222222
[root@nginx ~]# /usr/local/nginx/sbin/nginx -s reload ///重啓nginx服務,使上面的配置生效
因爲這裏我沒有配置dns服務器,只是簡單的在hosts文件裏添加了兩個域名信息,因此只能在本機上用域名的方式訪問兩個域名了,以下
[root@nginx ~]# curl http://www.xiaowei_1.com
11111
[root@nginx ~]# curl http://www.xiaowei_2.com
222222
結果代表,基於域名的虛擬主機配置成功,默認狀況下本機的默認網站是virtualhost.conf文件中第一個server節點中對應的網站,以下結果:
[root@nginx ~]# curl http://localhost
11111
好的,到這裏基於域名的虛擬主機配置方式配置成功!
2.基於端口:
基於端口也是很簡單的,這裏我直接上面「基於域名」的基礎上在virtualhost.conf配置文件增長了兩段基於端口的配置信息,也能夠把上面的基於域名的配置信息所有刪除,作一個純基於端口的配置文件
[root@nginx extra]# cat virtualhost.conf
server {
listen 80;
server_name www.xiaowei_1.com;
location / {
root html/xiaowei_1;
index index.html index.php;
}
}
server {
listen 80;
server_name www.xiaowei_2.com;
location / {
root html/xiaowei_2;
index index.html index.php;
}
}
server { ///從這裏開始增長下面的兩個server字段
listen 8080;
location / {
root html/xiaowei_3; ///本機的ip是10.10.16.29,本機8080端口網站目錄是xiaowei_3,下面會建立這個目錄。
index index.html index.php;
}
}
server {
listen 8081;
location / {
root html/xiaowei_4;
index index.html index.php;
}
}
[root@nginx html]# mkdir xiaowei_3 xiaowei_4
[root@nginx xiaowei_3]# cat index.html
33333
[root@nginx xiaowei_4]# cat index.html
444444
[root@nginx ~]# /usr/local/nginx/sbin/nginx -s reload
如今能夠在本機或者其餘機器的瀏覽器上輸入http://10.10.16.29:8080或者http://10.10.16.29:8081會看到不一樣的內容:(若是局域網內有dns服務器,在dns服務器上添加域名www.xiaowei.com對應ip地址10.10.16.29,則在瀏覽器上輸入http://www.xiaowei.com:8080或者http://www.xiaowei.com:8081會有一樣的效果)
[root@nginx xiaowei_4]# curl http://10.10.16.29:8080
33333
[root@nginx xiaowei_4]# curl http://10.10.16.29:8081
444444
結果代表經過端口訪問也是成功的!
還能夠將基於端口的配置信息獨立出來成virtualport.conf,一樣放在extra目錄下,而後在nginx.conf配置文件中添加include extra/virtualport.conf,效果一樣是能夠經過端口訪問的。
到這裏,基於端口的虛擬主機配置成功了!
3.基於ip:
基於ip的方式就更簡單了,只要將基於域名方式中的域名換成ip地址就能夠了。