Порт уважения перенаправления в заголовке хоста?

Я часто работаю с туннелированными портами, где я буду SSH передать удаленный порт 80 локальному порту 8080.

Одна из интересных проблем, с которыми я сталкиваюсь, является этим, когда у меня есть правило как это в NGINX:

rewrite ^/(.+)/$ /$1 permanent;

Переписывание возьмет запрос, который похож на это:

curl -is -X GET http://localhost:8080/one/two/three/

И перенаправьте его к URL как это:

http://localhost/one/two/three

Это разделяет порт от заголовка хоста, и я перенаправляюсь для портирования 80, который развязан и повреждает вещи.

Я могу настроить NGINX для уважения серверного порта (как существующего в заголовке Хоста) при выполнении перенаправлений?

it does

Как видно в заголовках запроса, заголовок Хоста включает порт, и я хотел бы, чтобы NGINX использовал это значение для всех перенаправлений для поддержания исходного порта, клиент раньше получал доступ к серверу.

Моя конфигурация сайта NGINX похожа на это:

server {
  listen *:80;
  server_name           _;

  index  index.html index.htm;

  access_log            /var/log/nginx/default.access.log combined;
  error_log             /var/log/nginx/default.error.log;

  location / {
    root      /vagrant/_site;
    index     index.html index.htm index.php;
    try_files $uri $uri.html $uri/ =404;
  }

  port_in_redirect on;
  server_name_in_redirect off;
}

Точные шаги для репродуцирования похожи на это:

$ curl -is http://localhost:8080/2015/08/from-hell-flying-united-airlines
HTTP/1.1 301 Moved Permanently
Server: nginx/1.8.0
Date: Wed, 02 Sep 2015 19:43:10 GMT
Content-Type: text/html
Content-Length: 184
Location: http://localhost/2015/08/from-hell-flying-united-airlines/
Connection: keep-alive

<html>
<head><title>301 Moved Permanently</title></head>
<body bgcolor="white">
<center><h1>301 Moved Permanently</h1></center>
<hr><center>nginx/1.8.0</center>
</body>
</html>

Я не уверен, почему это перенаправляет для добавления наклонной черты во-первых, но перенаправление повреждает все.

3
задан 2 September 2015 в 22:44
1 ответ

Я исправил проблему интересным способом, который сразу не имеет для меня смысла. Похоже, что try_files все портит, поэтому я сделал следующее в своей конфигурации, чтобы все работало:

server {
  listen *:80;
  server_name           _;
  port_in_redirect on;
  server_name_in_redirect off;

  index  index.html index.htm index.php;

  access_log            /var/log/nginx/default.access.log combined;
  error_log             /var/log/nginx/default.error.log;

  location / {
    rewrite ^/(.+)/+$ $scheme://$http_host/$1 permanent;
    root      /vagrant/_site;
    index     index.html index.htm index.php;
    try_files $uri $uri/index.html $uri/ =404;
  }
}

Моя цель, если не сразу ясно, состоит в том, чтобы сообщения не заканчивались косой чертой.

Моя фактическая структура обслуживаемых каталогов выглядит так:

/vagrant/_site/2015/
`-- 08
    `-- from-hell-flying-united-airlines
        `-- index.html

Поэтому я говорю NGINX, что для каждого запроса я хочу, чтобы он пытался найти файл в $ uri , $ uri / index .html и $ uri / . Если ничего из этого не работает, верните 404.

1
ответ дан 3 December 2019 в 07:26

Теги

Похожие вопросы