Ubuntu 16.04下Nginx配置SSL后8080端口ASP.NET Core应用无法访问
嘿,我看你现在卡在Nginx代理ASP.NET Core应用的问题上了——明明注释了默认配置,访问8080端口的应用却还是跳Nginx默认页,而且还有Certbot的SSL跳转规则在掺和。我给你理几个关键的排查和修复步骤,应该能解决问题:
1. 彻底禁用Nginx默认配置
Ubuntu上Nginx的默认配置文件是/etc/nginx/sites-available/default,但真正生效的是/etc/nginx/sites-enabled/目录里的软链。你得先把默认配置的软链删掉:
sudo rm /etc/nginx/sites-enabled/default
然后把你自己的应用配置文件(比如叫mywebsite.conf)软链到启用目录,确保Nginx加载你的自定义配置:
sudo ln -s /etc/nginx/sites-available/mywebsite.conf /etc/nginx/sites-enabled/
2. 补全Nginx配置,添加8080端口转发规则
你给的配置片段只覆盖了HTTP转HTTPS的部分,缺了把HTTPS请求转发到ASP.NET Core应用的核心规则。修改后的完整配置大概是这样:
# 处理HTTP请求,强制跳转到HTTPS server { listen 80; server_name mywebsite.com www.mywebsite.com; # 保留Certbot生成的www域名跳转规则 if ($host = www.mywebsite.com) { return 301 https://$host$request_uri; } # 所有其他HTTP请求统一跳转到主域名的HTTPS return 301 https://mywebsite.com$request_uri; } # 处理HTTPS请求,转发到ASP.NET Core的8080端口 server { listen 443 ssl; server_name mywebsite.com www.mywebsite.com; # 保留Certbot生成的SSL相关配置 ssl_certificate /etc/letsencrypt/live/mywebsite.com/fullchain.pem; # managed by Certbot ssl_certificate_key /etc/letsencrypt/live/mywebsite.com/privkey.pem; # managed by Certbot include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot # 核心规则:将HTTPS请求反向代理到8080端口的ASP.NET Core应用 location / { proxy_pass http://localhost:8080; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection keep-alive; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }
3. 验证配置并重启Nginx
修改配置后一定要先验证合法性,避免Nginx重启失败:
sudo nginx -t
如果输出nginx: configuration file /etc/nginx/nginx.conf test is successful,说明配置没问题,再重启Nginx服务:
sudo systemctl restart nginx
4. 确认ASP.NET Core应用在8080端口正常运行
用下面的命令检查8080端口是否被你的ASP.NET Core进程占用:
sudo ss -tulpn | grep 8080
如果看不到你的应用进程,说明应用没有正常启动——可以先用dotnet run测试启动,或者配置systemd服务让应用后台持续运行。
5. 检查防火墙端口是否开放
Ubuntu 16.04默认使用ufw防火墙,确保80、443(如果需要直接访问8080端口,还要加上8080)端口已经开放:
sudo ufw allow 80/tcp sudo ufw allow 443/tcp # 若需要直接访问8080端口,执行下面的命令 sudo ufw allow 8080/tcp sudo ufw reload
按这些步骤操作后,应该就能正常访问你的ASP.NET Core应用了。如果还是有问题,可以查看Nginx的错误日志/var/log/nginx/error.log,里面会有具体的报错信息,方便进一步排查。
内容的提问来源于stack exchange,提问作者MigrationHistory

