Oracle Linux服务器Nginx配置异常:返回默认Oracle页面及重定向问题咨询
聊聊你的Nginx配置问题
咱们先拆解你遇到的两个核心问题:之前的重定向循环,以及现在返回Oracle默认页面的原因,再给你对应的修复方案。
一、为啥加了HTTP→HTTPS重定向就触发ERR_TOO_MANY_REDIRECTS?
重定向循环本质就是请求在HTTP和HTTPS之间来回跳,结合你的配置来看,大概率是这几个原因:
- HTTPS服务的匹配逻辑乱了:你的HTTP server块给IPv6的80端口设了
default_server,但两个HTTPS server块都没设这个属性。如果用IP访问,或者请求的域名和HTTPS块里的server_name不匹配,Nginx会默认选第一个HTTPS块处理。要是这时候你的Node.js应用或者某个隐藏配置又把请求导回HTTP,循环就来了。 $host变量的坑:如果请求的Host头和HTTPS块的server_name完全对不上,$host可能会被解析成服务器IP,而你的HTTPS块又没配置IP对应的证书或规则,请求处理异常后又跳回HTTP,形成死循环。- 重复的HTTPS块搞事情:你有两个几乎一模一样的HTTPS server块(就差个被注释的
root),Nginx匹配请求时会变得不可预测,尤其是当域名同时匹配两个块时,很容易触发异常跳转。
二、移除重定向后为啥返回Oracle默认页面?
你的HTTP server块只有监听端口和server_name,完全没写处理请求的location规则或者默认响应。当请求打到80端口时,Nginx找不到对应的处理逻辑,就会启用自带的静态文件服务——Oracle Linux默认的Nginx根目录是/usr/share/nginx/html,里面就是那个Oracle默认页面。
三、怎么修复?
1. 把HTTP→HTTPS重定向配置对(解决循环)
修改你的HTTP server块,让它专门处理HTTP请求并统一转HTTPS,别留漏洞:
server { listen 80; listen [::]:80 default_server; server_name ****; # 换成你的实际域名,或者用 _ 匹配所有域名 # 用301永久重定向,比302对SEO更友好 return 301 https://$host$request_uri; }
2. 删掉重复的HTTPS server块
留一个就行,要是需要给不同域名做HTTPS服务,确保每个块的server_name是唯一的:
server { listen 443 ssl; listen [::]:443 ssl; server_name ****; # 替换成你的实际域名 # 重要!别忘了加SSL证书配置(你之前的配置里没写,这是HTTPS必须的) ssl_certificate /path/to/your/cert.pem; ssl_certificate_key /path/to/your/key.pem; location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-NginX-Proxy true; proxy_pass http://localhost:8080/; proxy_ssl_session_reuse off; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; proxy_redirect off; } }
3. 几个要注意的点
- 确保SSL证书和密钥的路径是对的,不然HTTPS请求会失败,也可能间接导致重定向循环。
- 如果需要用IP访问,在HTTPS块里加
server_name 你的服务器IP;,避免因域名不匹配导致的异常处理。 - 检查下你的Node.js应用内部有没有强制跳HTTP的逻辑,如果有,改成通过
X-Forwarded-Proto头判断实际请求协议(因为Nginx已经做了反向代理,应用拿到的是本地的HTTP请求,得靠这个头识别用户实际用的是HTTPS)。
内容的提问来源于stack exchange,提问作者Soh Gavin
相关产品推荐
相关产品推荐

