Назад | Перейти на главную страницу

nginx proxy_set_header x-forwarded-proto, похоже, не работает

Так как я новичок в проксировании nginx, у меня есть вопрос.

Суть его:
Где прокси nginx устанавливает значения по умолчанию для php
$ _SERVER ["HTTP_X_FORWARDED_HOST"],
$ _SERVER ["HTTP_X_FORWARDED_SERVER"] и
$ _SERVER ["HTTP_X_FORWARDED_FOR"]?

Больше информации:
Это среда разработки.
У меня есть запись vhost на моем прокси-сервере nginx:

server {
    listen 192.168.1.17:443 ssl;
    server_name foo.bar.com;

    ssl_certificate /etc/nginx/ssl/boerse.de.crt;
    ssl_certificate_key /etc/nginx/ssl/boerse.de.key;

    location / {
        proxy_pass http://foo_cluster/;

        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-Server $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

foo_cluster поддерживает только один сервер:

upstream foo_cluster {
    ip_hash;
    server 192.168.5.33:80 fail_timeout=30s;
    server 192.168.5.34:80 fail_timeout=30s down;
}

На моем веб-сервере apache по адресу 192.168.5.33 у меня есть еще один виртуальный хост:

<VirtualHost *:80>
    ServerName foo.bar.com
    ServerAdmin webmaster@bar.com
    DocumentRoot /var/www/foo-bar-com
    <Directory /var/www/foo-bar-com/>
            Options Indexes FollowSymLinks MultiViews
            AllowOverride ALL
            Order allow,deny
            allow from all
    </Directory>

    LogLevel warn
    ErrorLog /var/log/apache2/foo.bar.com_error.log
    CustomLog /var/log/apache2/foo.bar.com_access.log combined

    ServerSignature On
    SetEnv ApplicationConfigFiles "/var/ApplicationConfigFiles/"

    php_value include_path ".:/var/www/baz/global/php/base:/var/www/foo-bar-com/vendor/library/:/var/www/foo-bar-com/vendor/models/model/:"
    php_value auto_prepend_file /var/www/foo-bar-com/class/functions/prepend.php
    php_value auto_append_file /var/www/foo-bar-com/class/functions/append.php
</VirtualHost>

В моем файле hosts на моем локальном компьютере я добавил сервер:

...
192.168.1.17 foo.bar.com
...

В моем prepend.php я просто выводю суперглобальный $ _SERVER и останавливаюсь:

<?php
    var_dump($_SERVER); exit;
    ...

Хорошо. Теперь, когда все настроено, я открываю сайт в моем браузере по адресу https://foo.bar.com

Вот выдержка из выходного исходного кода:

array(32) {
    ...
    ["HTTP_HOST"]=>
    string(11) "foo.bar.com"
    ["HTTP_X_FORWARDED_HOST"]=>
    string(11) "foo.bar.com"
    ["HTTP_X_FORWARDED_SERVER"]=>
    string(11) "foo.bar.com"
    ["HTTP_X_FORWARDED_FOR"]=>
    string(13) "192.168.2.131"
    ["HTTP_CONNECTION"]=>
    string(5) "close"
    ...

Поскольку мне не хватает ожидаемого X-Forwarded-Proto, я закомментирую все proxy_set_header в файле vhost nginx (и перезагружаю службу):

server {
    listen 192.168.1.17:443 ssl;
    server_name foo.bar.com;

    ssl_certificate /etc/nginx/ssl/boerse.de.crt;
    ssl_certificate_key /etc/nginx/ssl/boerse.de.key;

    location / {
        proxy_pass http://foo_cluster/;

        #proxy_set_header Host $host;
        #proxy_set_header X-Forwarded-Host $host;
        #proxy_set_header X-Forwarded-Server $host;
        #proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        #proxy_set_header X-Forwarded-Proto $scheme;
    }
}

Тем не менее, результат остается прежним.

Я весь день искал в Google, почему это может быть так.
документация nginx для proxy_set_header состояния:

Эта директива позволяет переопределить и добавить несколько строк заголовка запроса, которые будут передаваться на прокси-сервер.

Интересно, почему написано именно «переопределить». Я не нашел ответа на то, что здесь предопределено для переопределения через proxy_set_header.

Я искал /etc/nginx/nginx.conf для proxy_set_header, на самом деле я искал весь каталог / etc / nginx с помощью

grep -ri x-forwarded-host *

Результаты найдены только там, где есть сайты-доступные и разрешенные сайты.

Я искал то же самое на веб-сервере apache без каких-либо полезных результатов (я думал, что они могут быть установлены в php-коде, но я ошибался).

Я сомневаюсь, что мой файл nginx vhost даже использовался.

Спасибо за уделенное время.

Tldr:
Где прокси nginx устанавливает значения по умолчанию для php
$ _SERVER ["HTTP_X_FORWARDED_HOST"],
$ _SERVER ["HTTP_X_FORWARDED_SERVER"] и
$ _SERVER ["HTTP_X_FORWARDED_FOR"]?

Как оказалось, мой предпочтительный метод перезагрузки конфигурации nginx не работает:

/etc/init.d/nginx reload

Он просто не перезагружал конфигурацию.

Однако после перезапуска прокси он работал, как ожидалось.

Также работает перезагрузка через двоичный файл:

nginx -s reload

Я не понимаю, почему это так, я задам еще один вопрос по этому поводу.