Frp 将内网 Nginx 80 端口代理到外网 18080 后,浏览器登录后错误, F12 发现返回了错误端口 80

环境:

web: 192.168.1.10:8080
nginx: 192.168.1.100:80

frp(内网穿透): 100.123.10.10:18080

frp 使用 tcp 模式,将内网 nginx 端口 80 的 web 服务在开放到外网 100.123.10.10 的 18080 端口。

问题:

在网页登陆成功后,外部 url 的端口却变成称了 80 导致访问失败:


        浏览器访问 http://100.123.10.10:18080 后可以正常显示登录界面,通过 f12 查看 network 发现 点击登录按钮后,nginx 返回的端口号为 80 ,也就是 http://100.123.10.10:80 。正常应该返回 http://100.123.10.10:18080 端口才对。在点击登录后手动加上 18080 端口才能正常跳转登录后的页面

Frp 内网穿透配置:

[ test ]
   type=tcp
   host=192.168.1.100
   local_port=80
   remote=18080

Nginx 配置:

http {
  include       mime.types;
  default_type  application/octet-stream;

  sendfile        on;
  keepalive_timeout  65;

  server {
    listen       80;
    server_name  localhost;

    location / {
        sendfile off;
        #proxy_redirect     default;
        proxy_pass http://127.0.0.1:8080;
        proxy_http_version 1.1;

        proxy_set_header   Connection        $connection_upgrade;
        proxy_set_header   Upgrade           $http_upgrade;

        proxy_set_header   Host              $host:$server_port;
        proxy_set_header   X-Real-IP         $remote_addr;
        proxy_set_header   X-Forwarded-For   $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Proto $scheme;
        proxy_max_temp_file_size 0;

        client_max_body_size       10m;
        client_body_buffer_size    128k;

        proxy_connect_timeout      90;
        proxy_send_timeout         90;
        proxy_read_timeout         90;
        proxy_buffering            off;
        proxy_request_buffering    off; # Required for HTTP CLI commands
        proxy_set_header Connection ""; # Clear for keepalive
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   html;
    }}}

正常显示为:

1、内网浏览器访问Nginx代理的 80 端口,可以正常显示

2、外网浏览器访问Frp代理后的 18080 端口,可以正常显示

解决方法:

1、(已测试)两个虚拟主机(纯静态-html 支持) - Two Virtual Hosts, Serving Static Files

http {
: server {
: listen          80;
: server_name     www.domain1.com;
: access_log      logs/domain1.access.log main;
: location / {
: index index.html;
: root  /var/www/domain1.com/htdocs;
: }
: }
: server {
: listen          80;
: server_name     www.domain2.com;
: access_log      logs/domain2.access.log main;
: location / {
: index index.html;
: root  /var/www/domain2.com/htdocs;
: }
: }
}

2、(已测试)将 nginx 代理后的 Web应用 Listen port 变更为 18080 ,并且修改 nginx 内的 proxy_pass 即可。

3、(已测试)proxy_set_header Host $host:$server_port; 改为 proxy_set_header Host $http_host;

4、(未测试)Nginx可以 if 判断来源进行重写。

感谢:       

        coolloves  

        gam2046   

        stille  

​参考:
        https://www.nginx.cn/doc/example/virtualhost.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值