linux下nginx實現虛擬主機(3種方法:基於域名、基於端口、基於ip地址)

    在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

wKioL1PgnluSYs0cAADqrQlQdRk797.jpg

wKiom1PgnUKw1SfZAAEVORDJst0867.jpg

結果代表經過端口訪問也是成功的!

還能夠將基於端口的配置信息獨立出來成virtualport.conf,一樣放在extra目錄下,而後在nginx.conf配置文件中添加include extra/virtualport.conf,效果一樣是能夠經過端口訪問的。

到這裏,基於端口的虛擬主機配置成功了!


3.基於ip:

基於ip的方式就更簡單了,只要將基於域名方式中的域名換成ip地址就能夠了。

相關文章
相關標籤/搜索