我有一个用作代理的 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 的连接。