Nginx 仅将服务器的特定路径从 http 重定向到 https
Nginx redirect only specific paths of a server from http to https
我想将路径从 http 重定向到 https,如下所示:
- http://localhost:80/ 到同一个 Http url
- http://localhost:80/api/ to https://localhost:80/api/ which in turn redirects to https://localhost:55555/api/
我有一个配置文件:
worker_processes 1;
events {
worker_connections 1024;
}
http {
server {
listen 80;
listen [::]:80;
server_name localhost;
return 301 https://$host$request_uri;
}
# HTTPS server
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
ssl_certificate certs/myservice.crt;
ssl_certificate_key certs/myservice.key;
server_name myservice.com localhost;
location /api/ {
proxy_set_header X-Real-IP $remote_addr;
proxy_pass https://localhost:55555/api/;
client_max_body_size 500G;
proxy_connect_timeout 300;
proxy_send_timeout 300;
proxy_read_timeout 3600;
send_timeout 300;
}
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_pass http://localhost:80/;
client_max_body_size 500G;
proxy_connect_timeout 300;
proxy_send_timeout 300;
proxy_read_timeout 3600;
send_timeout 300;
}
location ~ /\.ht {
deny all;
}
}
}
当我尝试这样做时,第二个要求得到了满足。但是第一个保持 http://localhost:80/ 不变的方法失败了。它被不必要地重定向为 https://localhost .
简而言之,nginx 将所有到达本地主机服务器上端口 80 的 HTTP 请求重定向到 HTTPS。
我还尝试从第二个服务器块中删除 location / { } 部分。
然后尝试在第一个服务器块中指定为:
server {
listen 80;
listen [::]:80;
server_name localhost;
location / {
proxy_pass http://localhost:80/
}
location /api/ {
return 301 https://$host$request_uri;
}
}
两个都没用
在 Nginx 中仅将服务器的特定路径从 http 重定向到 https 的正确方法是什么?
第二个服务器块中的此部分将不起作用。因为它再次重定向到 https。
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_pass http://localhost:80/;
client_max_body_size 500G;
proxy_connect_timeout 300;
proxy_send_timeout 300;
proxy_read_timeout 3600;
send_timeout 300;
}
因此将该应用程序暴露到 80 以外的其他主机端口,比如 88。然后将此代理通行证 URL 更改为:
proxy_pass http://localhost:88/;
现在可以正常使用了。
我想将路径从 http 重定向到 https,如下所示:
- http://localhost:80/ 到同一个 Http url
- http://localhost:80/api/ to https://localhost:80/api/ which in turn redirects to https://localhost:55555/api/
我有一个配置文件:
worker_processes 1;
events {
worker_connections 1024;
}
http {
server {
listen 80;
listen [::]:80;
server_name localhost;
return 301 https://$host$request_uri;
}
# HTTPS server
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
ssl_certificate certs/myservice.crt;
ssl_certificate_key certs/myservice.key;
server_name myservice.com localhost;
location /api/ {
proxy_set_header X-Real-IP $remote_addr;
proxy_pass https://localhost:55555/api/;
client_max_body_size 500G;
proxy_connect_timeout 300;
proxy_send_timeout 300;
proxy_read_timeout 3600;
send_timeout 300;
}
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_pass http://localhost:80/;
client_max_body_size 500G;
proxy_connect_timeout 300;
proxy_send_timeout 300;
proxy_read_timeout 3600;
send_timeout 300;
}
location ~ /\.ht {
deny all;
}
}
}
当我尝试这样做时,第二个要求得到了满足。但是第一个保持 http://localhost:80/ 不变的方法失败了。它被不必要地重定向为 https://localhost .
简而言之,nginx 将所有到达本地主机服务器上端口 80 的 HTTP 请求重定向到 HTTPS。
我还尝试从第二个服务器块中删除 location / { } 部分。
然后尝试在第一个服务器块中指定为:
server {
listen 80;
listen [::]:80;
server_name localhost;
location / {
proxy_pass http://localhost:80/
}
location /api/ {
return 301 https://$host$request_uri;
}
}
两个都没用
在 Nginx 中仅将服务器的特定路径从 http 重定向到 https 的正确方法是什么?
第二个服务器块中的此部分将不起作用。因为它再次重定向到 https。
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_pass http://localhost:80/;
client_max_body_size 500G;
proxy_connect_timeout 300;
proxy_send_timeout 300;
proxy_read_timeout 3600;
send_timeout 300;
}
因此将该应用程序暴露到 80 以外的其他主机端口,比如 88。然后将此代理通行证 URL 更改为:
proxy_pass http://localhost:88/;
现在可以正常使用了。