NGINX를 사용하여 HTTP 백엔드에 대한 HTTPS 요청 프록시 듣고 80;

HTTP를 통해 백엔드와 통신하는 외부에서 볼 수있는 웹 서버로 nginx를 구성했습니다.

달성하려는 시나리오는 다음과 같습니다.

  1. 클라이언트는 HTTP 요청을 nginx로 보내고 동일한 URL로 리디렉션되지만 HTTPS를 통해 리디렉션됩니다.
  2. 백엔드에 HTTP를 통한 nginx 프록시 요청
  3. nginx는 HTTP를 통해 백엔드로부터 응답을받습니다.
  4. nginx는 이것을 HTTPS를 통해 클라이언트로 다시 전달합니다.

현재 설정 (백엔드가 올바르게 구성되어 있음)은 다음과 같습니다.

서버 {
        듣고 80;
        server_name 로컬 호스트;

        위치 ~. * {
            proxy_pass http : // backend;
            proxy_redirect http : // backend https : // $ host;
            proxy_set_header 호스트 $ host;
            }
        }

내 문제는 클라이언트에 대한 응답 (4 단계)이 HTTPS가 아닌 HTTP를 통해 전송된다는 것입니다. 어떤 아이디어?



답변

설정하려는 프록시 유형을 리버스 프록시라고합니다. 리버스 프록시 nginx에 대한 빠른 검색으로이 페이지가 나타납니다.

http://intranation.com/entries/2008/09/using-nginx-reverse-proxy/

X-Forwarded-For 헤더 (실제 소스 IP에 대한 앱 가시성을 제공)와 같은 유용한 기능을 추가하는 것 외에도 다음과 같은 이점이 있습니다.

proxy_redirect off

행운을 빕니다! 🙂


답변

프로덕션 환경에서 다음 구성을 사용하고 있습니다.

server {
    listen xxx.xxx.xxx.xxx:80;
    server_name www.example.net;

    rewrite ^(.*) https://$server_name$1 permanent;
}

server {
    listen xxx.xxx.xxx.xxx:443;
    server_name www.example.net;

    root   /vhosts/www.example.net;

    ssl                  on;
    ssl_certificate      /etc/pki/nginx/www.example.net.crt;
    ssl_certificate_key  /etc/pki/nginx/www.example.net.key;

    ssl_prefer_server_ciphers on;
    ssl_session_timeout 1d;
    ssl_session_cache shared:SSL:50m;
    ssl_session_tickets off;

    # Diffie-Hellman parameter for DHE ciphersuites, recommended 2048 bits
    ssl_dhparam /etc/pki/nginx/dh2048.pem;

    # intermediate configuration. tweak to your needs.
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:ECDHE-RSA-DES-CBC3-SHA:ECDHE-ECDSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';

    location / {
        proxy_pass http://127.0.0.1:8080;
        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;
    }
}


답변

server {

    listen 80;
    server_name www.example.net example.net;

   rewrite ^/(.*)$ https://$host$request_uri? permanent;
}

server {
  listen 443;
  server_name www.example.net example.net;
  .....................


답변