当我们有了一个 VPS 主机以后,为了不浪费 VPS 的强大资源(相比共享主机1000多个站点挤在一台机器上),往往有想让 VPS 做点什么的想法,银子不能白花啊:)。放置多个网站或者博客是个不错的想法,可是如何配置 web 服务器才能在一个 VPS 上放置多个网站/博客呢?如何通过一个 IP 访问多个站点/域名呢?这就教大家如何用nginx配置多个站点的方法。
这里以配置2个站点(2个域名)为例,n 个站点可以相应增加调整,假设:
IP地址: 127.0.0.1
域名1 www.bnuz163.com tomcat端口为80 静态文件放在 /www/bnuz
域名2 moto.bnuz163.com tomcat端口为8081 静态文件放在 /www/moto
配置 nginx virtual hosting 的基本思路和步骤如下:
- 把2个站点 www.bnuz163.com, moto.bnuz163.com 放到 nginx 可以访问的目录 /www/
- 给每个站点分别创建一个 nginx 配置文件 www.conf,moto.conf, 并把配置文件放到 /nginx/vhosts/
- 然后在 /conf/nginx.conf 里面加一句 include 把步骤2创建的配置文件全部包含进来
- 重启 nginx
具体过程
1、在 /nginx 下创建 vhosts
目录
mkdir vhosts
2、在 /nginx/vhosts/ 里创建一个名字为 www.conf
的文件,把以下内容拷进去
#upstream的负载均衡,weight是权重,可以根据机器配置定义权重。weigth参数表示权值,权值越高被分配到的几率越大。
upstream www.bnuz163.com{
server server1.bnuz163.com:8080 max_fails=1 fail_timeout=1s;
server server2.bnuz163.com:8080 max_fails=1 fail_timeout=1s;
}
server {
listen 80;
server_name bunz163.com www.bnuz163.com;
root ./html/bnuz/;
#access_log logs/host.access.log main;
#重定向
if ($host = 'bnuz163.com'){
rewrite ^/(.*)$ http://www.bnuz163.com/$1 permanent;
}
location ~^/druid/ {
proxy_pass http://www.bnuz163.com;
proxy_connect_timeout 2s;
}
location / {
index index.html;
#如果直接域名访问就显示上一句index配置的静态首页
if ( !-e $request_filename ) {
proxy_pass http://www.bnuz163.com;
}
proxy_connect_timeout 2s;
proxy_redirect off;
proxy_set_header Host $host; #这一句至关重要
proxy_set_header X-Real-IP $remote_addr;
#后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location ~* \.(htm|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma|svg|js|css)$ {
root ./www/bnuz/;
expires 1h;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root ./html/bnuz/;
}
}
3、在 /nginx/vhosts/ 里创建一个名字为 moto.conf
的文件,把以下内容拷进去
upstream moto.bnuz163.com{
server moto.bnuz163.com:8081 max_fails=1 fail_timeout=1s;
}
server {
listen 80;
server_name moto.bnuz163.com;
location / {
proxy_pass http://moto.bnuz163.com;
proxy_connect_timeout 2s;
proxy_redirect off;
proxy_set_header Host $host; #这一句至关重要
proxy_set_header X-Real-IP $remote_addr;
#后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location ~* \.(htm|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma|svg|js|css)$ {
root ./www/moto/;
expires 1h;
}
}
4、打开 /nginx/conf/nginx.conf 文件,在相应位置加入 include
把以上2个文件包含进来
worker_processes 1;
error_log logs/error.log;
error_log logs/error.log notice;
error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 10000;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
#tcp_nopush on;
#默认编码
charset utf-8;
tcp_nopush on; #防止网络阻塞
tcp_nodelay on; #防止网络阻塞
#keepalive_timeout 0;
keepalive_timeout 60;
#开启zip网页压缩
gzip on;
gzip_min_length 1k;
gzip_buffers 4 8k;
gzip_http_version 1.1;
gzip_types text/plain application/x-javascript text/css application/xml;
#秒抢小助手配置
include ./vhosts/www.conf;
# 摩托车商城配置
include ./vhosts/moto.conf;
}
5、判断配置文件是否正确,如果正确就重启nginx
nginx -t
提示:
the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
configuration file /usr/local/nginx/conf/nginx.conf test is successful
测试成功, 重启nginx,输入命令:nginx -s reload
重启之后访问www.bnuz163.com和moto.bnuz163.com就是两个不同的站点啦!