在 WSL 中使用 NGINX 重定向 URL 访问 Web 服务器不起作用

在 WSL 中使用 NGINX 重定向 URL 访问 Web 服务器不起作用

我们有一个 C# .Net Core 3.1 应用程序,它托管一个网站(所有配置都在 Program.cs 和 Startup.cs 中),它在 Windows 上运行良好。它已设置,因此欢迎页面显示在https://ip/产品名称而不是直接https://ip/。不幸的是,我们似乎无法使用 kestrel .Net Core 代码以相同的方式进行设置,并且已将其设置为监听http://本地主机:5000/

我对这个问题的解决方案是设置 NGINX 将所有请求从 HTTP 重定向到 HTTPS,并将请求从位置 /ProductName 重定向到 127.0.0.1:5000。这在运行此程序的生产设备上效果很好,但我似乎无法让它在适用于 Linux 的 Windows 子系统上运行(这样开发人员就不需要物理设备来调试/测试内容了)。

这是我们在生产设备中使用的 nginx.conf,也是我尝试用于 WSL 的 nginx.conf:

user www-data;
worker_processes 1;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;

events {
    worker_connections 768;
}

http {

    sendfile on;
    keepalive_timeout 65;

    include /etc/nginx/mime.types;
    default_type application/octet-stream;

    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

    # Redirect All HTTP to HTTPS
    server {
        listen       8080 default_server;
        server_name  _;

        return 301 https://$host$request_uri;
    }

    # HTTPS server
    #
    server {
        listen       8443 ssl;
        server_name  localhost;

        ssl_certificate      /path/to/my/server.crt;
        ssl_certificate_key  /path/to/my/server.key;

    ssl_protocols  TLSv1.3 TLSv1.2;
        ssl_ciphers  HIGH:!aNULL:!MD5;
        root /path/to/my/wwwroot;

        location / {
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_pass http://127.0.0.1:5001;

        }

        location /ProductName/ {
            proxy_pass http://127.0.0.1:5000/;
        }
    }
}

请注意,我们没有在或中包含任何文件/etc/nginx/conf.d//etc/nginx/sites-enabled/也没有/etc/nginx/modules-enabled/任何其他 conf 文件。

此文件(用于 WSL)与生产文件之间的一个主要区别是,我们使用端口 8080 和 8443 而不是 80 和 443,因为当它尝试绑定到端口 80 时,我不断收到权限被拒绝错误,即使我使用 sudo 启动 NGINX 服务。

当我使用此文件启动 NGINX 服务时,我无法使用http://127.0.0.1/产品名称(我认为这是可行的,因为它应该被重定向到 HTTPS,然后按照我的第二条规则重定向到http://127.0.0.1:5000/我的程序正在监听它),也不使用https://127.0.0.1/产品名称。 我可以仅有的通过访问http://127.0.0.1:5000/,就好像 NGINX 服务根本没有运行一样。

我曾尝试在 Google 上搜索如何在 WSL 上设置 NGINX,发现有些人说它应该按原样工作,与“真正的” Linux 设置相比,不需要任何其他额外的技巧或配置。

为了实现这个功能我缺少什么?

答案1

为了实现这个功能我缺少什么?

从 80 和 443 到 8080 和 8443 的变化可能是这里的罪魁祸首。

使用http://127.0.0.1/ProductNamehttps://127.0.0.1/ProductName通常分别相当于使用http://127.0.0.1:80/ProductNamehttps://127.0.0.1:443/ProductName(也就是说,例如浏览器假定使用这些标准端口,以便人们不必为每个 Web 请求都指定它们)。

尝试使用http://127.0.0.1:8080/ProductNamehttps://127.0.0.1:8443/ProductName看看它们是否有效。如果有效,那么您可能需要解决端口冲突或想出另一个您可以接受的解决方案。

相关内容