Nginx перенаправляет на http с https - PullRequest
1 голос
/ 13 марта 2019

Я настроил nginx для обслуживания статического содержимого только по некоторому пути (/url_path).

Ниже указан путь к моей конфигурации nginx:

server {

    listen 80;
    server_name example.com;

    if ( $http_x_forwarded_proto = "http" ) {
        rewrite ^ https://$host$request_uri permanent;
    }

    ssl_session_timeout  5m;

    ssl_protocols  TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers  HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers   on;

    charset utf-8;
    keepalive_timeout 5;

    root /absolute/local/path;
    index  index.html index.htm;
    add_header Cache-Control public;

    access_log /var/log/nginx/app-access.log;
    error_log /var/log/nginx/app-error.log;

    rewrite_log on;

    location /url_path {
        alias   /absolute/local/path;
    }
    ...
}

Мой сервер nginx находится за awselb2.0 который настроен на пересылку запросов, полученных на порт https на порт http на наших машинах, на которых работает сервер nginx на http.

Запрос выполняется по следующей схеме:

BROWSER --HTTPS--> ELB --HTTP--> NGINX
BROWSER <--HTTPS-- ELB <--HTTP-- NGINX

Когдазапросить запрос через curl, он показывает двойное перенаправление для некоторого запроса, который должен был быть обработан без какого-либо перенаправления.

$ curl -L https://example.com/url_path

HTTP/2 301
location: http://example.com/url_path                                    # Recieved first redirect
server: nginx/1.12.2
cache-control: public

> curl another request to this URL: 'http://example.com/url_path'        # Followed first redirect

< HTTP/1.1 301 Moved Permanently
< Date: Wed, 13 Mar 2019 06:45:16 GMT
< Content-Type: text/html
< Content-Length: 185
< Connection: keep-alive
< Server: nginx/1.12.2
< Location: https://example.com/url_path                                 # Recieved second redirect

> curl another request to this URL: 'https://example.com/url_path'       # Followed second redirect

< HTTP/2 200                                                            # Request was served this time.
< date: Wed, 13 Mar 2019 06:45:17 GMT
< content-type: text/html; charset=utf-8
< content-length: 1158
< server: nginx/1.12.2
< last-modified: Tue, 12 Mar 2019 18:42:03 GMT
< etag: "5c87fd7b-486"
< cache-control: public
< accept-ranges: bytes

Я не могу понять, почему nginx перенаправляет с https на http.Кажется, проблема связана с alias только в конфиге nginx, поскольку, когда я использую proxy_pass при работающем узле (экспресс), перенаправления не происходит.

Даже при таком поведении chrome и firefox работают нормально,но это не похоже на случай с safari, так как он выдает ошибку CORS (иногда).

Есть еще одна вещь, которая в последнем запросе от curl показала следующее:

* Found bundle for host example.com: 0x7f9d2ac24a50 [can multiplex]
* Re-using existing connection! (#0) with host example.com

Не уверен, что это полезно, но используется первое соединение, созданное при запросе ресурса https.

...