NGINX 서버를 다른 NGINX 서버의 SSL 프록시로 사용하고 있습니다. 안타깝게도 업스트림 서버에서 요청을 리디렉션하는 경우 위치 필드에 잘못된 대상 포트가 포함됩니다.
curl -v "https://example.com/site"
:
> GET /site HTTP/2
> Host: example.com
> User-Agent: curl/7.58.0
> Accept: */*
>
* Connection state changed (MAX_CONCURRENT_STREAMS updated)!
< HTTP/2 301
< server: nginx
< date: Sun, 18 Mar 2018 20:01:44 GMT
< content-type: text/html
< content-length: 178
< location: http://example.com:9101/site/
< strict-transport-security: max-age=15768000; includeSubDomains
NGINX 프록시:
# Proxy: example.com
####################
server {
listen 0.0.0.0:80;
listen [::]:80;
server_name example.com;
root /srv/www/_empty;
location / { return 301 https://example.com$request_uri; }
}
upstream myupstream {
server [::1]:9101;
}
server {
listen 0.0.0.0:443 ssl http2;
listen [::]:443 ssl http2;
server_name example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
root /srv/www/_empty;
location / {
proxy_set_header Host $http_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 $scheme;
proxy_set_header X-Frame-Options "";
proxy_set_header X-Content-Type-Options "";
proxy_pass http://myupstream;
}
}
NGINX 업스트림 서버:
# NGINX Site: example.com
#########################
server {
# Server
listen [::1]:9101;
server_name example.com;
# Root
root /srv/www/example.com/staging;
# Disable Caching
sendfile off;
# Charset
charset utf-8;
# Default
location / {
index index.html;
try_files $uri $uri/ =404;
}
}
동일한 머신에서 별도의 마스터 프로세스로 실행되는 두 NGINX 인스턴스. 다른 것은 완벽하게 작동합니다.
나는 NGINX 프록시가 업스트림 응답을 다시 작성 http://example.com:9001/site/
하여 https://example.com/site/
.
내가 무엇을 잊었나요?