本文主要以实例讲解如何使用nginx代理本地多个项目,以及如何使用nginx构造本地项目集群。以Windows环境为例,Linux环境修改相应配置依然适用。
一、nginx代理本地多个项目
1.1 新建配置目录
进入nginx安装目录,进入conf目录,新建一个子目录:vhosts_conf(以此为例)
1.2 新建配置文件
在vhosts_conf目录下新建配置文件,如下:
项目A:vhosts_projA_dev.conf
项目B:vhosts_projB_dev.conf
项目C:vhosts_projC_dev.conf
其他项目:依此类推
1.3 编辑配置文件
1.3.1 vhosts_projA_dev.conf
upstream a.52study.com {
server 127.0.0.1:8080 weight=1;
# server 127.0.0.1:8081 weight=1;
# server 127.0.0.1:8082 weight=1;
}
server {
listen 80;
server_name 127.0.0.1;
location ~ /images/+ {
proxy_pass http://a.52study.com;
}
location ~ /download/.*\.(gif|jpg|jpeg|png)$ {
root D:/home/static;
expires 1d;
}
location / {
proxy_pass http://a.52study.com;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 50m;
client_body_buffer_size 10m;
proxy_buffers 32 4k;
proxy_connect_timeout 3;
proxy_send_timeout 60;
proxy_read_timeout 60;
}
error_page 404 http://a.52study.com/projA/notFound;
}
1.3.2 vhosts_projB_dev.conf
upstream b.52study.com {
server 127.0.0.1:8090 weight=1;
}
server {
listen 100;
server_name 127.0.0.1;
location ~ /images/+ {
proxy_pass http://b.52study.com;
}
location ~ /download/.*\.(gif|jpg|jpeg|png|mp4)$ {
root D:/home/static;
expires 1d;
}
location / {
proxy_pass http://b.52study.com;
proxy_redirect off;
proxy_set_header Host $host:100;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 50m;
client_body_buffer_size 10m;
proxy_buffers 32 4k;
proxy_connect_timeout 3;
proxy_send_timeout 60;
proxy_read_timeout 60;
}
error_page 404 http://b.52study.com/projB/notFound;
}
1.3.3 vhosts_projC_dev.conf
upstream c.52study.com {
server 127.0.0.1:9000 weight=1;
}
server {
listen 120;
server_name 127.0.0.1;
location ~ /images/+ {
proxy_pass http://c.52study.com;
}
location ~ /download/.*\.(gif|jpg|jpeg|png|mp4)$ {
root D:/home/static;
expires 1d;
}
location / {
proxy_pass http://c.52study.com;
proxy_redirect off;
proxy_set_header Host $host:120;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 50m;
client_body_buffer_size 10m;
proxy_buffers 32 4k;
proxy_connect_timeout 3;
proxy_send_timeout 60;
proxy_read_timeout 60;
}
error_page 404 http://c.52study.com/projC/notFound;
}
1.3.4 nginx.conf
修改conf目录下的nginx.conf文件,注意,此处将注释部分均删除,本地配置文件可根据实际情况保留
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
client_body_buffer_size 10m;
client_max_body_size 50m;
client_body_temp_path temp/client_body_temp;
sendfile on;
keepalive_timeout 65;
include vhosts_conf/vhosts_projA_dev.conf;
include vhosts_conf/vhosts_projB_dev.conf;
include vhosts_conf/vhosts_projC_dev.conf;
}
做完以上操作,重启nginx
1.4 增加host映射
修改hosts文件,文件位置:C:\Windows\System32\drivers\etc\hosts,新增如下配置
127.0.0.1 a.52study.com
127.0.0.1 b.52study.com
127.0.0.1 c.52study.com
1.5 创建服务
新建三个server,分别对应以上三个项目,如下图
修改projB和projC的配置,修改完记得CTRL+S保存,如下图
projB
projC
分别启动服务,即可同时使用多个系统了,当然电脑性能不好的童鞋还是不要冒险尝试了,可能会卡
projA访问地址:http://a.52study.com/projA
projB访问地址:http://b.52study.com:100/projB
projC访问地址:http://c.52study.com:120/projC
二、nginx构造本地项目集群
稍微留心一点的童鞋可能会发现 “1.3.1 vhosts_projA_dev.conf” 中,upstream里面有两行注释的代码,解开注释,就是本地集群的做法,其中 weight 是权重
当然,本地也需要启动多个项目,以projA为例,以上配置修改为如下
upstream a.52study.com {
server 127.0.0.1:8080 weight=1;
server 127.0.0.1:8081 weight=1;
server 127.0.0.1:8082 weight=1;
}
新建三个eclipse的server,分别对应三个projA系统,我们分别以projA(port:8080),projA1(port:8081),projA2(port:8082)对其命名
修改projA1的配置,如下:
修改projA2的配置,如下:
分别启动projA,projA1,projA2,即完成本地集群
清空三个server的控制台,访问:http://a.52study.com/projA,当某个页面存在多个请求时,会发现,三者后台会分担多个请求