nginx 和 SSL 重定向

nginx 和 SSL 重定向

我有一个用作代理的 nginx 服务器。我希望所有请求都转发为普通 http 请求,除了对 api.mydomain.org 的请求,这些请求我希望使用 ssl/https 运行。

这与以下情况配合得很好:

server {
       listen 80;
       server_name api.mydomain.org;
       return 301 https://api.mydomain.org$request_uri;
}

server {

        listen   443;
        server_name api.mydomain.org;

          location / {
                proxy_pass  http://backend;

                 proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
                 proxy_redirect off;
                 proxy_buffering off;
                 proxy_set_header        Host            $host;
                 proxy_set_header        X-Real-IP       $remote_addr;
                 proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
         }

        ssl on;
        ssl_certificate /etc/nginx/ssl/api.mydomain.org/server.crt;
        ssl_certificate_key /etc/nginx/ssl/api.mydomain.org/server.key;
}

但是,这会将所有请求重定向到未明确指定/限定的子域。例如,a.mydomain.org 或 b.mydomain.org 被发送到https://api.mydomain.org

我该如何配置它?

答案1

添加一个默认服务器块,它将捕获未知的主机头并拒绝连接它们。

server {
    listen 80 default_server;
    return 444;
}

您可能希望将您的公共 IP 地址添加到server_name第一个块中的指令中,以接受使用该 IP 地址的 HTTP/1.0 或 HTTP/1.1 的连接。

相关内容