在 nginx 负载均衡器中将 http 重定向到 https

在 nginx 负载均衡器中将 http 重定向到 https

我们设置了 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

相关内容