2023-10-25 10:38:34
在昨天的博客(NGINX:端口映射子域名&维护页面切换)中,我们成功的将不同端口映射到指定的三级域名,并且实现了维护页面的基础切换,但是在后续的查询时,却发现了一个问题。
我的博客浏览量是和用户访问IP直接关联的,然而在NGINX启用后,用不同的网络设备去浏览同一篇网站时,计数始终没有变更,初步怀疑是NGINX反向代理的锅。于是今天到服务器查看了redis的浏览量数据集,发现IP全是127.0.0.1,明显是本地回路地址。
所以问题原因很明了了,解决措施就是在NGINX的server.location中设置代理的请求头,我这边使用的是通用的大家都在使用的写法。
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://dreamcenter;
}
其次在springboot中获取ip时也不能再直接使用 request.getRemoteAddr() 来获取了,而要从请求头获取。
String realIp = request.getHeader("X-Real-IP");
这样就能正确的获取IP了,博客的浏览量记录也恢复正常。
然后是当主服务下线后,走后备backup服务时,因为我http-server服务没有指定404页面,导致如果访问路径不存在时,会显示浏览器默认的404页面。所以需要加配一个404页面以供访问异常时显示。最终的server配置如下所示。
server {
listen 443 ssl;
server_name www.dreamcenter.top;
ssl_certificate C:\xxxxxxxx\ssl\dreamcenter.top_nginx\dreamcenter.top_bundle.crt;
ssl_certificate_key C:\xxxxxxxx\ssl\dreamcenter.top_nginx\dreamcenter.top.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://dreamcenter;
}
error_page 404 /404.html;
location = /404.html {
root C:\xxxxxxxx\dreamcenter\维护页面;
internal;
}
}