![在 nginx 负载均衡器中将 http 重定向到 https](https://linux22.com/image/780426/%E5%9C%A8%20nginx%20%E8%B4%9F%E8%BD%BD%E5%9D%87%E8%A1%A1%E5%99%A8%E4%B8%AD%E5%B0%86%20http%20%E9%87%8D%E5%AE%9A%E5%90%91%E5%88%B0%20https.png)
我们设置了 nginx 负载均衡器来配置我们的服务器。
现在,要求是我们维护的所有 DNS 都应该只允许使用 https。
例如:tempserver.com 是指向这个公共 lb 的 dns,它反过来会与 tomcat 应用程序连接。
以下是我的配置文件。
upstream backend25 {
server 10.65.74.9:80;
}
##########################################################################
server {
listen 80 backlog=1000;
listen 8080 backlog=1000;
############################### URL #######################################
server_name tempserver.get.com;
if ($http_x_forwarded_proto = "http") {
rewrite ^/(.*)$ https://tempserver.get.com/$1 permanent;
}
access_log /var/log/nginx/access-tempserver.log upstream_time buffer=128k flush=1m;
error_log /var/log/nginx/error-tempserver.log;
client_max_body_size 100M;
location / {
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_pass http://backend25;
}
########################## SSL for Public only #############################
listen 443 ssl;
#ssl on;
ssl_certificate /opt/ssl_new/ssl_bundle.crt;
ssl_certificate_key /opt/ssl_new/privatekey.key;
}
所以我使用下面的方法进行重定向。
if ($http_x_forwarded_proto = "http") {
rewrite ^/(.*)$ https://tempserver.get.com/$1 permanent;
}
现在如果我触发http://tempserver.get.com它正确地重定向到https://tempserver.get.com
这很好。但如果我传递任何参数,例如http://tempserver.get.com/tempserver
它正在接受 http 连接但重定向没有发生。
那么,这里可以做什么?有什么建议吗?
提前致谢。
答案1
执行 HTTP 到 HTTPS 重定向的首选模式如下:
server {
listen 80;
server_name example.com www.example.com;
return 301 https://www.example.com$request_uri;
}
使用此功能时,您需要从当前配置中删除listen 80;
该语句。if