nginx反向代理配置一个域名映射到不同端口的项目

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

要在nginx配置https端口映射,你可以按照以下步骤进行操作: 1. 首先,找到nginx配置文件路径。可以通过查看正在运行的nginx进程的PID来获取执行路径。使用以下命令查找nginx进程的PID: ``` netstat -anop | grep 0.0.0.0:80 ``` 2. 获取到nginx的执行路径后,使用-t参数来获取该进程对应的配置文件路径,例如: ``` /usr/local/nginx/sbin/nginx -t ``` 3. 打开nginx配置文件,该文件的路径是前一步获取到的路径。在文件中找到http块,并在其中添加以下配置: ``` server { listen 443 ssl; server_name yourdomain.com; ssl_certificate /path/to/ssl_certificate.crt; ssl_certificate_key /path/to/ssl_certificate.key; location / { proxy_pass http://127.0.0.1:8000; # 这里将8000替换为你要映射的http端口 } } ``` 请注意替换yourdomain.com为你的域名,并将`/path/to/ssl_certificate.crt`和`/path/to/ssl_certificate.key`替换为你的SSL证书和私钥文件的路径。 4. 确保你的配置文件没有语法错误,可以使用以下命令进行检查: ``` /usr/local/nginx/sbin/nginx -t ``` 5. 如果检查没有错误,可以重新加载nginx配置文件,使更改生效: ``` /usr/local/nginx/sbin/nginx -s reload ``` 这样,你的nginx配置就完成了https端口映射。请注意,在生产环境中,不要随意重启nginx服务,除非必要。<span class="em">1</span><span class="em">2</span><span class="em">3</span><span class="em">4</span>
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值