You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NGINX配置:仅将443端口流量转发至反向代理的方法

问题描述

我配置了NGINX同时监听80和443端口,之前所有端口流量都能正常转发到7000端口由ASP.NET处理。后来我注释了部分配置,想让HTTP 80端口的流量不再转发到7000,而是由NGINX直接提供/var/www/somedomain.com目录下的文件,但访问http://somedomain.com/.well-known/acme-challenge/test.html时一直返回404错误,怀疑请求还是被转发到了上游服务器。另外发现HTTP请求会自动重定向到HTTPS,这可能也是导致404的原因之一。

现有NGINX配置如下:

upstream somedomain.com
{
    server 127.0.0.1:7000;
}

server
{
    server_name somedomain.com;

    listen [::]:443 ssl default_server;
    listen 443 ssl default_server;

    ssl_certificate           /etc/letsencrypt/live/somedomain.com/fullchain.pem;
    ssl_certificate_key       /etc/letsencrypt/live/somedomain.com/privkey.pem;
    include                   /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam               /etc/letsencrypt/ssl-dhparams.pem;

    add_header X-Frame-Options DENY;
    add_header X-Content-Type-Options nosniff;

    gzip on;
    gzip_types      text/plain application/xml;
    gzip_proxied    no-cache no-store private expired auth;
    gzip_min_length 1000;
    gunzip on;

    location / {
        proxy_pass http://somedomain.com;
    }
}

server
{
    #if ($host = somedomain.com)
    #{    #    return 301 https://$host$request_uri;
    #}

    listen 80;
    listen [::]:80;
    server_name somedomain.com;
    #return 404;

    root /var/www/somedomain.com;

    location / {
    }
}

注:test.html已经放在正确路径,/var/www/somedomain.com目录下同时有ASP.NET文件。

解决方案

1. 修复80端口的静态文件处理逻辑

当前80端口的location /块是空的,NGINX不会自动处理静态文件请求,必须明确添加try_files指令,让NGINX优先查找本地文件:

server
{
    listen 80;
    listen [::]:80;
    server_name somedomain.com;

    root /var/www/somedomain.com;

    location / {
        try_files $uri $uri/ =404;
    }

    # 单独配置ACME验证路径,避免其他规则干扰(可选但更稳妥)
    location /.well-known/acme-challenge/ {
        try_files $uri =404;
    }
}

添加后,NGINX会先尝试匹配请求的文件路径,找到就直接返回,不会转发到上游服务器。单独配置/.well-known/acme-challenge/可以确保ACME验证请求的优先级最高,不会被其他规则影响。

2. 关闭自动HTTPS重定向

HTTP自动跳转到HTTPS通常有两个来源,逐一排查:

  • NGINX配置文件:检查/etc/letsencrypt/options-ssl-nginx.conf文件,里面可能包含强制HTTPS的重定向规则,如果有类似return 301 https://$host$request_uri;的内容,要么注释掉,要么在80端口的server块中添加指令覆盖。
  • ASP.NET应用设置:因为/var/www/somedomain.com下有ASP.NET文件,可能应用本身开启了HSTS或者强制HTTPS重定向。可以临时移走该目录下的web.config测试,如果移走后不再重定向,说明是应用层面的设置,需要修改ASP.NET的配置(比如web.config或launchSettings.json)关闭强制HTTPS。

3. 验证配置并重启NGINX

修改完配置后,先执行nginx -t检查语法是否正确,确认没问题后执行systemctl reload nginx(不同系统命令可能略有差异)让配置生效。

内容的提问来源于stack exchange,提问作者Andy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 17:24:55