访问虚拟服务器后面的 nginx 丢失端口号

访问虚拟服务器后面的 nginx 丢失端口号

我有一个运行 nginx 的 Debian 服务器,其 nginx 配置如下:

server {
  listen 80 default_server;

  root /var/www/serviceserver1;
  index index.html index.htm;      

  location /api {
        proxy_redirect          http://localhost:3001/  /api;
        proxy_pass_header       Server;
        proxy_set_header        X-Real-IP $remote_addr;
        proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header        X-Scheme $scheme;
        proxy_set_header        Host $http_host;
        proxy_set_header        X-NginX-Proxy true;
        proxy_connect_timeout   5;
        proxy_read_timeout      240;
        proxy_intercept_errors  on;

        proxy_pass              http://localhost:3001;
    }

    location /graphql {
        proxy_redirect          http://localhost:3001/  /graphql;
        proxy_pass_header       Server;
        proxy_set_header        X-Real-IP $remote_addr;
        proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header        X-Scheme $scheme;
        proxy_set_header        Host $http_host;
        proxy_set_header        X-NginX-Proxy true;
        proxy_connect_timeout   5;
        proxy_read_timeout      240;
        proxy_intercept_errors  on;

        proxy_pass              http://localhost:3001;
   }

  # Root route
  location = / {
    try_files $uri /landing/index.html;
  }

  # admin routes
  location /admin {
    try_files $uri $uri/ /admin/index.html;
  }

  # analytics routes
  location /analytics {
    try_files $uri $uri/ /analytics/index.html;
  }

  # landing routes
  location /landing {
    try_files $uri $uri/ /landing/index.html;
  }

  # Any other route default to landing
  location / {
    try_files $uri $uri/ /landing/index.html;
  }
}

在我的局域网中工作得很好。

我现在正在设置与 Internet 的外部连接。我使用带有虚拟服务器配置的 TP-LINK TL-R470T+ 来重定向我的端口(外部的 8000 到内部的 80):

在此输入图像描述

当我尝试从外部访问我的浏览器时,我使用:

http://170.80.200.100:8000/landing/

一切都很好。

当我需要在 Web 应用程序上切换页面时,我的问题就出现了。每次导航时,我都会返回到没有端口的网址,例如(IP 地址不是真实的地址):

http://170.80.200.100/landing/

http://170.80.200.100/admin/

或者

http://170.80.200.100/analytics/

因此,每次我导航到不同的页面时,我都需要在地址栏中手动输入 :8000,这是不切实际的。

当我从互联网访问时,如何设置 NGINX 文件以在每个访问的 URL 上保留原始端口 (:8000)?


请注意,我尝试将内部端口从 80 更改为 8000,当从内部 LAN 访问该端口时,应用程序运行良好,但我无法在内部将其设置为 8000,需要在外部将其设置为 8000。

相关内容