Nginx 프록시/업스트림 리디렉션이 잘못된 포트 및 프로토콜을 사용합니다.

Nginx 프록시/업스트림 리디렉션이 잘못된 포트 및 프로토콜을 사용합니다.

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/.

내가 무엇을 잊었나요?

답변1

proxy_redirect defaultupstream블록 을 사용 중이고 nginx명령문에서 필요한 문자열을 가져올 수 없기 때문에 예상한 대로 작동하지 않습니다 proxy_pass. 다음을 사용하여 명시적으로 지정할 수 있습니다.

proxy_redirect http://example.com:9101/ /;

보다이 문서이상.


또는 귀하에게 알려주십시오.업스트림 서버다음을 사용하여 리디렉션 응답에서 포트 지정을 중지합니다.

port_in_redirect off;

보다이 문서이상.

관련 정보