一.nginx反向代理配置一个域名映射到不同端口的项目
一个域名一般是绑定要一个端口,http默认是绑定80端口,https默认绑定443,如果我们直接使用服务器的域名端口发布服务的话,需要外网访问的项目都需要放到同一个web服务器下。
但是有些项目由于开发语言不同等等原因不能放在一个web服务器一起发布,都有外网域名访问的需求,使用nginx反向代理配置可以解决。
例如微信公众号的H5链接必须域名才能正常访问,我们可以使用把域名绑定的端口指向nginx服务器,其他端口的项目通过nginx映射即可。
首先下载nginx 我下载的是1.13.1版本 下载后找到 ..\nginx\nginx-1.13.1\conf\nginx.conf配置文件 修改配置
1.我直接把我的配置贴出来 大家参考
#================begin=========================
#user nobody;
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 1024;
}
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"';
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 10;
proxy_connect_timeout 10;
# proxy_read_timeout 1;
# proxy_send_timeout 1;
#gzip on;
server {
listen 80; #这个nglnx监听的端口
server_name localhost;
location /wsyyPlatform { #wsyyPlatform为该tomcat发布的项目
proxy_pass http://127.0.0.1:8098;
}
location /wsyy { #wsyy为该tomcat发布的项目
proxy_pass http://127.0.0.1:8085;
}
}
}
#================end=========================
相信大家看一下 server的配置已经知道怎么配置了,
location /wsyyPlatform { #wsyyPlatform为该tomcat发布的项目
proxy_pass http://127.0.0.1:8098;
}
要映射到的项目通过这几行配置搞定。。。
location的写法有几种
这种写法也行
location /wsyyPlatform/ { #wsyyPlatform为该tomcat发布的项目
proxy_pass http://127.0.0.1:8098/wsyyPlatform/;
}
二.使用中碰到的问题
1.我是java web项目,项目中有重定向的代码response.sendRedirect(url)
默认情况下重定向到ng配置的项目真实地址了
解决方法是ng配置文件增加
proxy_set_header Host $http_host;
2.nginx默认的请求大小都有限制,默认是1M,上传文件超过1M是常有的,需要增加以下配置
client_max_body_size 3m; #最大接受3m文件以内的
配置可以设置为全局的,也可以每个location下单独指定
3.nginx配置代理后丢失端口号
我这边在配置nginx代理nexus私服时,出现过该问题,配置如下
nginx端口号是8086
代理nuxus私服后加载js css资源 发现8086端口号丢失,导致加载资源失败
处理方法,增加配置
主要是proxy_set_header Host $host:$server_port;配置把nginx端口号携带过去
location /nexus/ {
proxy_set_header Host $host:$server_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://10.8.3.196:8081/nexus/;
}
重新加载nginx配置文件,再次访问正常
4.nginx 504 (Gateway Time-out)
业务系统部分请求耗时很长,ajax和后台接口都调整了timeout超时时间为1小时,浏览器请求时发现该报错,排查是nginx默认超时时间60S
调整为1个小时,根据业务场景,可以针对某个location单独映射,也可以配置全局。
location /wsyyPlatform/ {
proxy_send_timeout 3600s; # 设置发送超时时间,
proxy_read_timeout 3600s; # 设置读取超时时间。
proxy_pass http://127.0.0.1:7081/wsyyPlatform/;
}
修改后nginx配置重启nginx,再次测试,5.7分都没超时 。不过这个都有利有弊,因为超时时间一小时意味着如果你的后台服务真的有问题,系统故障导致一直没返回,nginx没到超时时间还是会等待,这个对于项目调优严格的需要全面考虑,调整合适的。
三.window启动nginx
cmd G:
cd G:\workSoft\nginx\nginx-1.13.1
启动
start nginx
停止
nginx.exe -s stop
重新载入conf配置文件
nginx.exe -s reload
1.提供几个bat脚本,放到nginx\nginx-1.13.1目录下即可,省的敲CMD
1.1 reload.bat
nginx -s reload
@echo reload nginx server...
cmd
1.1 startup.bat
start nginx
@echo start nginx server...
cmd
1.1 stop.bat
nginx.exe -s stop
@echo stop nginx service...
cmd
四.最后总结:
通用配置
location /bsoftmecwx1/ {
client_max_body_size 30m;
proxy_set_header Host $host:$server_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://192.168.1.240:7082/bsoftmecwx1/;
}
如果没有nginx我们必须把wsyyPlatform,wsyy放到一个容器下发布 ,如果2个程序开发语言不同放一个容器发布不了,
我这里服务器域名为wying.com.cn,通过nginx反向代理配置后我们通过浏览器
访问http://wying.com.cn/wsyyPlatform会自动映射到http://127.0.0.1:8098/wsyyPlatform;
访问http://wying.com.cn/wsyy会自动映射到http://127.0.0.1:8085/wsyy
这个只有服务器有一个域名 我们可以把程序部署在多个容器 只要映射好可以通过域名访问了
————————————————
版权声明:本文为CSDN博主「影子2401」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq445829096/article/details/81671082