需求:
访问80端口,根据不同的目录访问不同的web程序;
外部访问地址 |
内部实际地址 |
www.test.com |
127.0.0.1:81 |
www.test.com\Demo |
127.0.0.1:82\Demo |
实现:
1.下载nginx:打开 nginx官网,选择Stable version版本下的windows版下载;附蓝奏云地址: nginx/Windows-1.18.0;
2.解压到非中文路径下,打开目录下 conf\nginx.conf文件
3.修改server 下的代码:
server { listen 80; server_name 127.0.0.1; location / { proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://127.0.0.1:81; } location /Demo { proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://127.0.0.1:82/Demo; } }
4.停用本地所有占用80端口的web服务,重启IIS;
5.在nginx.exe目录下,cmd访问,输入:
start nginx
若启动成功,任务管理器进程中可以查看到nginx.exe的进程;
6.若无法访问,则查看目录 logs\error.log文件,常见错误有端口被占用和路径包含中文,解决办法就是停用所有80端口web服务,和将此文件夹移动到非中文路径即可,停止服务可在nginx.exe下输入cmd命令 nginx.exe -s stop 或者 taskkill /f /im nginx ;
补充:
遇到新问题,有的时候转发后会报错,504 Gateway Time-out,经过网上摸索找到如下解决办法:
在conf\nginx.conf文件内容改为如下代码(为了方便查看,已将带#前缀的删除):
worker_processes 4; events { worker_connections 100000; } http { fastcgi_buffers 8 128k; send_timeout 60; include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; server { listen 80; server_name 127.0.0.1; location / { proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://127.0.0.1:90; proxy_read_timeout 3600; } location /api { proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://127.0.0.1:8007/api; proxy_read_timeout 3600; } } }
worker_processes 4:工作进程数,默认是1,你电脑CPU有几核就可以设置为数字几;
worker_connections: 100000:单个工作进程可以允许同时建立外部连接的数量,数字越大,能同时处理的连接越多;
proxy_read_timeout 3600:nginx默认超时时间是60s,超过60s,连接会被断开,这里我们将超时时间设置为3600,就是一个小时,这个值可以灵活设置
fastcgi_buffers 8 128k:设置缓冲区大小;
send_timeout 60:服务端向客户端发送数据的超时时间;
参考:
nginx 端口转发 (proxy_pass反向代理)
Windows下Nginx的启动、停止等命令
nginx把不同请求转发到不同端口的项目(统一监听80端口)
Windows下Nginx安装与配置教程
Nginx核心要领五:worker_processes、worker_connections设置
nginx设置连接超时解决504 gateway timeout
Nginx的超时timeout配置详解