一.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

这个只有服务器有一个域名 我们可以把程序部署在多个容器 只要映射好可以通过域名访问了

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐