nginx 多站點配置方法集合
更新時間:2011年06月28日 21:24:04 作者:
關(guān)于nginx的多站設(shè)置,其實和apache很相似,假設(shè)我們已經(jīng)有兩個域名,分別是:www.websuitA.com和www.websuitB.com。并且這兩個域名已經(jīng)映射給了IP為192.168.1.1的服務(wù)器。
那么我們開始吧:
1、為我們的站點創(chuàng)建配置文件
我是這么做的,在nginx的配置文件conf目錄下創(chuàng)建一個專門存放VirtualHost的目錄,命名為vhosts_conf,可以把虛擬目錄的配置全部放在這里。在里面創(chuàng)建名為vhosts_modoupi_websuitA.conf的配置文件并打開,我們在這里做配置,往里面寫:
server {
listen 80; #監(jiān)聽的端口號
server_name websuitA.com; #域名
#access_log logs/host.access.log main;
location / {
root X:/wnmp/www/websuitA; #站點的路徑
index default.php index.php index.html index.htm;
#站點的rewrite在這里寫
rewrite ^/(\w+)\.html$ /$1.php;
rewrite ^/(\w+)/(\w+)$ /$1/$2.php;
}
#錯誤頁的配置
error_page 404 /error.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
location ~ \.php$ {
root X:/wnmp/www/websuitA;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.ht {
deny all;
}
}
這樣就做好了,站點A的配置,同樣的方法,做websuitB的配置,這里我命名為vhosts_modoupi_websuitB.conf,直接上代碼
server {
listen 80; #監(jiān)聽的端口號
server_name websuitB.com; #域名
#access_log logs/host.access.log main;
location / {
root X:/wnmp/www/websuitB; #站點的路徑
index default.php index.php index.html index.htm;
#站點的rewrite在這里寫
rewrite ^/(\w+)\.html$ /$1.php;
rewrite ^/(\w+)/(\w+)$ /$1/$2.php;
}
#錯誤頁的配置
error_page 404 /error.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
location ~ \.php$ {
root X:/wnmp/www/websuitB;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.ht {
deny all;
}
}
這樣,兩個站點的配置就OK了。
2、在nginx的主配置文件里,包含這兩個站點的配置文件。
我們打開conf目錄下的nginx.conf文件,很容易做,只要在http{...}段輸入以下代碼:
#包含所有的虛擬主機的配置文件
include X:/wnmp/nginx/conf/vhosts_conf/*.conf;
這樣,nginx的多站點配置就做好了,怎么樣打開瀏覽器測試一下吧~
第二種方法:
當(dāng)我們有了一個 VPS 主機以后,為了不浪費 VPS 的強大資源(相比共享主機1000多個站點擠在一臺機器上),往往有想讓 VPS 做點什么的想法,銀子不能白花啊:)。放置多個網(wǎng)站或者博客是個不錯的想法,可是如何配置 web 服務(wù)器才能在一個 VPS 上放置多個網(wǎng)站/博客呢?如何通過一個 IP 訪問多個站點/域名呢?這就是大多數(shù) web 服務(wù)器支持的 virtual hosting 功能。這里將描述如何一步一步如何用 nginx 配置 virtual hosting。
nginx 是一個小巧高效的 web 服務(wù)器,由俄羅斯程序員 Igor Sysoev 開發(fā),nginx 雖然體積小,但功能一點也不弱,能和其他的 web 服務(wù)器一樣支持 virtual hosting,即一個IP對應(yīng)多個域名以支持多站點訪問,就像一個IP對應(yīng)一個站點一樣,所以是”虛擬”的。你想在一個 IP 下面放多少個站點就放多少,只要硬盤夠大就行。
這里以配置2個站點(2個域名)為例,n 個站點可以相應(yīng)增加調(diào)整,假設(shè):
IP地址: 202.55.1.100
域名1 example1.com 放在 /www/example1
域名2 example2.com 放在 /www/example2
配置 nginx virtual hosting 的基本思路和步驟如下:
把2個站點 example1.com, example2.com 放到 nginx 可以訪問的目錄 /www/
給每個站點分別創(chuàng)建一個 nginx 配置文件 example1.com.conf,example2.com.conf, 并把配置文件放到 /etc/nginx/vhosts/
然后在 /etc/nginx.conf 里面加一句 include 把步驟2創(chuàng)建的配置文件全部包含進(jìn)來(用 * 號)
重啟 nginx
具體過程
下面是具體的配置過程:
1、在 /etc/nginx 下創(chuàng)建 vhosts 目錄
1
mkdir /etc/nginx/vhosts
2、在 /etc/nginx/vhosts/ 里創(chuàng)建一個名字為 example1.com.conf 的文件,把以下內(nèi)容拷進(jìn)去
server {
listen 80;
server_name example1.com www. example1.com;
access_log /www/access_ example1.log main;
location / {
root /www/example1.com;
index index.php index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /www/example1.com/$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.ht {
deny all;
}
}
3、在 /etc/nginx/vhosts/ 里創(chuàng)建一個名字為 example2.com.conf 的文件,把以下內(nèi)容拷進(jìn)去
server {
listen 80;
server_name example2.com www. example2.com;
access_log /www/access_ example1.log main;
location / {
root /www/example2.com;
index index.php index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /www/example2.com/$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.ht {
deny all;
}
}
4、打開 /etc/nginix.conf 文件,在相應(yīng)位置加入 include 把以上2個文件包含進(jìn)來
user nginx;
worker_processes 1;
# main server error log
error_log /var/log/nginx/error.log ;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
# main server config
http {
include mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] $request '
'"$status" $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
gzip on;
server {
listen 80;
server_name _;
access_log /var/log/nginx/access.log main;
server_name_in_redirect off;
location / {
root /usr/share/nginx/html;
index index.html;
}
}
# 包含所有的虛擬主機的配置文件
include /usr/local/etc/nginx/vhosts/*;
}
5、重啟 Nginx
第三種方法:
一個服務(wù)器上需要跑多個網(wǎng)站,如果僅僅把域名解析到server的IP是不行的,訪問不同域名打開的都是nginx默認(rèn)的網(wǎng)站。要想分別對應(yīng),需要在nginx里設(shè)置vhost。
我是用lnmp一鍵安裝包(http://www.lnmp.org/ )安裝的nginx+mysql+php環(huán)境,對于其他自己編譯的nginx估計配置文件和安裝目錄會有所不同,自己酌情修改哦,呵呵
編輯/usr/local/nginx/conf/nginx.conf,去掉server的參數(shù)。
server
{
listen 80;
server_name www.wifizoo.net;
index index.html index.htm index.php;
root /tmp/wwwroot; 本文來自
location ~ .*\.(php|php5)?$
{
fastcgi_pass unix:/tmp/php-cgi.sock;
fastcgi_index index.php;
include fcgi.conf;
} copyright
location /status {
stub_status on;
access_log off;
}
copyright
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
}
location ~ .*\.(js|css)?$
{
expires 12h;
}
log_format access '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" $http_x_forwarded_for';
access_log /home/wwwroot/logs/access.log access;
}
然后加入vhost定義: copyright
include /usr/local/nginx/vhost/*.conf;
}
再在/usr/local/nginx/建立vhost文件夾,里面創(chuàng)建各域名的對應(yīng)配置文件。
這個簡單,就把之前的server配置內(nèi)容復(fù)制到創(chuàng)建的對應(yīng)conf文件里就OK了。
server
{
listen 80;
server_name www.dbjr.com.cn;
server_name jb51.net;
index index.html index.htm index.php;
root /tmp/wwwroot/meituge;
location ~ .*\.(php|php5)?$
{
fastcgi_pass unix:/tmp/php-cgi.sock;
fastcgi_index index.php;
include fcgi.conf;
} copyright
location /status {
stub_status on;
access_log off;
}
copyright
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
}
copyright
location ~ .*\.(js|css)?$
{
expires 12h;
}
#log_format access '$remote_addr - $remote_user [$time_local] "$request" '
#'$status $body_bytes_sent "$http_referer" '
#'"$http_user_agent" $http_x_forwarded_for';
#access_log /home/wwwroot/logs/access.log access;
}
這里要注意,如果你用的是一級域名,那么需要在server配置里指定不加www前綴的域名,否則訪問jb51.net會被定義到默認(rèn)站點而非www.dbjr.com.cn
server_name www.dbjr.com.cn;
server_name jb51.net;
1、為我們的站點創(chuàng)建配置文件
我是這么做的,在nginx的配置文件conf目錄下創(chuàng)建一個專門存放VirtualHost的目錄,命名為vhosts_conf,可以把虛擬目錄的配置全部放在這里。在里面創(chuàng)建名為vhosts_modoupi_websuitA.conf的配置文件并打開,我們在這里做配置,往里面寫:
復(fù)制代碼 代碼如下:
server {
listen 80; #監(jiān)聽的端口號
server_name websuitA.com; #域名
#access_log logs/host.access.log main;
location / {
root X:/wnmp/www/websuitA; #站點的路徑
index default.php index.php index.html index.htm;
#站點的rewrite在這里寫
rewrite ^/(\w+)\.html$ /$1.php;
rewrite ^/(\w+)/(\w+)$ /$1/$2.php;
}
#錯誤頁的配置
error_page 404 /error.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
location ~ \.php$ {
root X:/wnmp/www/websuitA;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.ht {
deny all;
}
}
這樣就做好了,站點A的配置,同樣的方法,做websuitB的配置,這里我命名為vhosts_modoupi_websuitB.conf,直接上代碼
復(fù)制代碼 代碼如下:
server {
listen 80; #監(jiān)聽的端口號
server_name websuitB.com; #域名
#access_log logs/host.access.log main;
location / {
root X:/wnmp/www/websuitB; #站點的路徑
index default.php index.php index.html index.htm;
#站點的rewrite在這里寫
rewrite ^/(\w+)\.html$ /$1.php;
rewrite ^/(\w+)/(\w+)$ /$1/$2.php;
}
#錯誤頁的配置
error_page 404 /error.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
location ~ \.php$ {
root X:/wnmp/www/websuitB;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.ht {
deny all;
}
}
這樣,兩個站點的配置就OK了。
2、在nginx的主配置文件里,包含這兩個站點的配置文件。
我們打開conf目錄下的nginx.conf文件,很容易做,只要在http{...}段輸入以下代碼:
復(fù)制代碼 代碼如下:
#包含所有的虛擬主機的配置文件
include X:/wnmp/nginx/conf/vhosts_conf/*.conf;
這樣,nginx的多站點配置就做好了,怎么樣打開瀏覽器測試一下吧~
第二種方法:
當(dāng)我們有了一個 VPS 主機以后,為了不浪費 VPS 的強大資源(相比共享主機1000多個站點擠在一臺機器上),往往有想讓 VPS 做點什么的想法,銀子不能白花啊:)。放置多個網(wǎng)站或者博客是個不錯的想法,可是如何配置 web 服務(wù)器才能在一個 VPS 上放置多個網(wǎng)站/博客呢?如何通過一個 IP 訪問多個站點/域名呢?這就是大多數(shù) web 服務(wù)器支持的 virtual hosting 功能。這里將描述如何一步一步如何用 nginx 配置 virtual hosting。
nginx 是一個小巧高效的 web 服務(wù)器,由俄羅斯程序員 Igor Sysoev 開發(fā),nginx 雖然體積小,但功能一點也不弱,能和其他的 web 服務(wù)器一樣支持 virtual hosting,即一個IP對應(yīng)多個域名以支持多站點訪問,就像一個IP對應(yīng)一個站點一樣,所以是”虛擬”的。你想在一個 IP 下面放多少個站點就放多少,只要硬盤夠大就行。
這里以配置2個站點(2個域名)為例,n 個站點可以相應(yīng)增加調(diào)整,假設(shè):
IP地址: 202.55.1.100
域名1 example1.com 放在 /www/example1
域名2 example2.com 放在 /www/example2
配置 nginx virtual hosting 的基本思路和步驟如下:
把2個站點 example1.com, example2.com 放到 nginx 可以訪問的目錄 /www/
給每個站點分別創(chuàng)建一個 nginx 配置文件 example1.com.conf,example2.com.conf, 并把配置文件放到 /etc/nginx/vhosts/
然后在 /etc/nginx.conf 里面加一句 include 把步驟2創(chuàng)建的配置文件全部包含進(jìn)來(用 * 號)
重啟 nginx
具體過程
下面是具體的配置過程:
1、在 /etc/nginx 下創(chuàng)建 vhosts 目錄
1
mkdir /etc/nginx/vhosts
2、在 /etc/nginx/vhosts/ 里創(chuàng)建一個名字為 example1.com.conf 的文件,把以下內(nèi)容拷進(jìn)去
復(fù)制代碼 代碼如下:
server {
listen 80;
server_name example1.com www. example1.com;
access_log /www/access_ example1.log main;
location / {
root /www/example1.com;
index index.php index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /www/example1.com/$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.ht {
deny all;
}
}
3、在 /etc/nginx/vhosts/ 里創(chuàng)建一個名字為 example2.com.conf 的文件,把以下內(nèi)容拷進(jìn)去
復(fù)制代碼 代碼如下:
server {
listen 80;
server_name example2.com www. example2.com;
access_log /www/access_ example1.log main;
location / {
root /www/example2.com;
index index.php index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /www/example2.com/$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.ht {
deny all;
}
}
4、打開 /etc/nginix.conf 文件,在相應(yīng)位置加入 include 把以上2個文件包含進(jìn)來
復(fù)制代碼 代碼如下:
user nginx;
worker_processes 1;
# main server error log
error_log /var/log/nginx/error.log ;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
# main server config
http {
include mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] $request '
'"$status" $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
gzip on;
server {
listen 80;
server_name _;
access_log /var/log/nginx/access.log main;
server_name_in_redirect off;
location / {
root /usr/share/nginx/html;
index index.html;
}
}
# 包含所有的虛擬主機的配置文件
include /usr/local/etc/nginx/vhosts/*;
}
5、重啟 Nginx
第三種方法:
一個服務(wù)器上需要跑多個網(wǎng)站,如果僅僅把域名解析到server的IP是不行的,訪問不同域名打開的都是nginx默認(rèn)的網(wǎng)站。要想分別對應(yīng),需要在nginx里設(shè)置vhost。
我是用lnmp一鍵安裝包(http://www.lnmp.org/ )安裝的nginx+mysql+php環(huán)境,對于其他自己編譯的nginx估計配置文件和安裝目錄會有所不同,自己酌情修改哦,呵呵
編輯/usr/local/nginx/conf/nginx.conf,去掉server的參數(shù)。
復(fù)制代碼 代碼如下:
server
{
listen 80;
server_name www.wifizoo.net;
index index.html index.htm index.php;
root /tmp/wwwroot; 本文來自
location ~ .*\.(php|php5)?$
{
fastcgi_pass unix:/tmp/php-cgi.sock;
fastcgi_index index.php;
include fcgi.conf;
} copyright
location /status {
stub_status on;
access_log off;
}
copyright
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
}
location ~ .*\.(js|css)?$
{
expires 12h;
}
log_format access '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" $http_x_forwarded_for';
access_log /home/wwwroot/logs/access.log access;
}
然后加入vhost定義: copyright
include /usr/local/nginx/vhost/*.conf;
}
再在/usr/local/nginx/建立vhost文件夾,里面創(chuàng)建各域名的對應(yīng)配置文件。
這個簡單,就把之前的server配置內(nèi)容復(fù)制到創(chuàng)建的對應(yīng)conf文件里就OK了。
復(fù)制代碼 代碼如下:
server
{
listen 80;
server_name www.dbjr.com.cn;
server_name jb51.net;
index index.html index.htm index.php;
root /tmp/wwwroot/meituge;
location ~ .*\.(php|php5)?$
{
fastcgi_pass unix:/tmp/php-cgi.sock;
fastcgi_index index.php;
include fcgi.conf;
} copyright
location /status {
stub_status on;
access_log off;
}
copyright
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
}
copyright
location ~ .*\.(js|css)?$
{
expires 12h;
}
#log_format access '$remote_addr - $remote_user [$time_local] "$request" '
#'$status $body_bytes_sent "$http_referer" '
#'"$http_user_agent" $http_x_forwarded_for';
#access_log /home/wwwroot/logs/access.log access;
}
這里要注意,如果你用的是一級域名,那么需要在server配置里指定不加www前綴的域名,否則訪問jb51.net會被定義到默認(rèn)站點而非www.dbjr.com.cn
server_name www.dbjr.com.cn;
server_name jb51.net;
相關(guān)文章
負(fù)載均衡下的webshell上傳+nginx解析漏洞的過程
這篇文章主要介紹了負(fù)載均衡下的webshell上傳+nginx解析漏洞,首先介紹了負(fù)載均衡下webshell上傳的四大難點及環(huán)境搭建教程,感興趣的朋友跟隨小編一起看看吧2024-02-02nginx開啟https配置之后網(wǎng)頁無法訪問的問題處理解決
最近新購服務(wù)器部署nginx之后按照之前的方式部署前端項目并配置https之后訪問頁面無法顯示,本文主要介紹了nginx開啟https配置之后網(wǎng)頁無法訪問的問題處理解決,具有一定的參考價值,感興趣的可以了解一下2023-11-11Nginx添加ipv6模塊以及遇到問題解決方案詳解(親測有效)
IPV4日益稀缺,ipv6已經(jīng)慢慢走上日程,待ipv6在國內(nèi)普及,使用nginx配置ipv6那是肯定的,下面這篇文章主要給大家介紹了關(guān)于Nginx添加ipv6模塊以及遇到問題的解決方案,需要的朋友可以參考下2022-09-09