Я настроил 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
.