Отписаться


ср, 23 янв. 2019 г. в 11:15, <nginx-ru-request@nginx.org>:
Сообщения, предназначенные для списка
рассылки nginx-ru, отправляйте по адресу
        nginx-ru@nginx.org

Для изменения параметров подписки или
отписки используйте веб-страницу
        http://mailman.nginx.org/mailman/listinfo/nginx-ru
или отправьте письмо, в теле или теме
которого будет слово 'help', по адресу
        nginx-ru-request@nginx.org

Адрес администратора этого списка
рассылки:
        nginx-ru-owner@nginx.org

При ответе, пожалуйста, измените тему
письма на более содержательную чем "Re:
Содержание дайджеста списка рассылки
nginx-ru..."
В этом номере:

   1. Re: Upstream и заголовок Host (Alex Tkachuk)
   2. Re: Upstream и заголовок Host (Maxim Dounin)
   3. fcgiwrap не могу запустить (Victor Sudakov)
   4. Re: fcgiwrap не могу запустить (Victor Sudakov)
   5. Re: fcgiwrap не могу запустить (Victor Sudakov)



---------- Forwarded message ----------
From: Alex Tkachuk <alex@tkachuk.pp.ua>
To: nginx-ru@nginx.org
Cc: 
Bcc: 
Date: Tue, 22 Jan 2019 14:28:50 +0200
Subject: Re: Upstream и заголовок Host
В линуксе есть какой-то прикол с резолвом .local доменов. Гляньте на /etc/nsswitch.conf. Там определяется очередность служб для резолва адресов. Для .local оно как-то отдельно идет.

Отправлено с iPhone

22 янв. 2019 г., в 09:29, Dmitriy Lyalyuev <dmitriy@lyalyuev.info> написал(а):

Если коротко, то - https://serverfault.com/questions/598202/make-nginx-to-pass-hostname-of-the-upstream-when-reverseproxying

Второй ответ в треде.
Но сама схема, как по мне, выглядит костылем. Костылем и лечить.

-- 
With best regards,
Dmitriy Lyalyuev



On Jan 22, 2019, at 08:54, CoDDoC via nginx-ru <nginx-ru@nginx.org> wrote:

Доброе время суток!

Тестовый сервер: test.local. В нем тестовый кластер:
upstream cdn {
    server <IP_1>:<port_1>;
    server <IP_2>:<port_2>;
    ....
}

или:
upstream cdn {
    server cdn001.test.local:<port_1>;
    server cdn002.test.local:<port_2>;
    ....
}

Не принципиально, ибо "cdn001.test.local" резолвится в <IP_1> и т.д.

Само собой, "proxy_http_version 1.1;" и из какого-то локейшена "proxy_pass http://cdn;"
Теперь смотрю, что приходит, например, на выбранный бэкенд.
Ожидаю там увидеть в заголовке Host значение <IP> или 'cdn###.test.local'.
Вижу: http header: "Host: cdn". Что не так?

Входящий контроль проверяет правильность заголовка Host.
Все, что не соответствуют разрешенным, посылаются на 400. Можно, конечно, добавить фильтрацию по белому списку, что-то типа "такой-то IP должен прислать такой-то заголовок". Но (ИМХО) костыль.

proxy_set_header 'Host' $upstream_addr; - бесполезно.
$upstream_addr получает значение ПОСЛЕ proxy_pass.

Попутно вопрос о $upstream_addr.
Ее можно еще как-то использовать, кроме как в логах? Например, отправить в php, но без костылей?

Спасибо.
--
_______________________________________________
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

_______________________________________________
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru



---------- Forwarded message ----------
From: Maxim Dounin <mdounin@mdounin.ru>
To: CoDDoC via nginx-ru <nginx-ru@nginx.org>
Cc: 
Bcc: 
Date: Tue, 22 Jan 2019 17:31:37 +0300
Subject: Re: Upstream и заголовок Host
Hello!

On Tue, Jan 22, 2019 at 09:54:12AM +0300, CoDDoC via nginx-ru wrote:

> Доброе время суток!
>
> Тестовый сервер: test.local. В нем тестовый кластер:
> upstream cdn {
>     server <IP_1>:<port_1>;
>     server <IP_2>:<port_2>;
>     ....
> }
>
> или:
> upstream cdn {
>     server cdn001.test.local:<port_1>;
>     server cdn002.test.local:<port_2>;
>     ....
> }
>
> Не принципиально, ибо "cdn001.test.local" резолвится в <IP_1> и т.д.
>
> Само собой, "proxy_http_version 1.1;" и из какого-то локейшена "proxy_pass http://cdn;"
> Теперь смотрю, что приходит, например, на выбранный бэкенд.
> Ожидаю там увидеть в заголовке Host значение <IP> или 'cdn###.test.local'.
> Вижу: http header: "Host: cdn". Что не так?

А можно вопрос - почему вы ожидаете увидеть в заголовке Host
"<IP> или 'cdn###.test.local'"?

Документация по данному вопросу однозначна, да и, скажем,
прописывая в DNS соответствующие A или CNAME-записи никто не
ожидает, что в запросах будет заголовок Host, соответствующий
содержимому записи.

Почему от блоков upstream вдруг ожидается какое-то другое
поведение?

На всякий случай уточню - вопрос вполне серьёзный, хочется
понять, на какие аналогии опираются люди, считающие, что заголовок
Host должен зависеть от того, на какой IP-адрес из списка был
отправлен запрос.  Вроде бы аналогия с DNS очевидна, и она
подразумевает именно именно то поведение, которое есть сейчас, но
почему-то людей, предполагающих другое поведение, много.

[...]

> Попутно вопрос о $upstream_addr.
> Ее можно еще как-то использовать, кроме как в логах? Например, отправить в php, но без костылей?

Нет.  Запрос формируется до выбора бэкенда, на который этот запрос
будет отправлен (а в рамках proxy_next_upstream - один и тот же
запрос может быть отправлен на несколько бэкендов).  Соотвественно
переменную $upstream_addr можно использовать в логах (а равно при
обработке ответа бэкенда - скажем, в add_header), но бессмысленно
использовать в запросе на бэкенд - на момент формирования запроса
она всегда будет пустой.

--
Maxim Dounin
http://mdounin.ru/




---------- Forwarded message ----------
From: Victor Sudakov <vas@mpeks.tomsk.su>
To: nginx-ru@nginx.org
Cc: 
Bcc: 
Date: Wed, 23 Jan 2019 00:23:57 +0700
Subject: fcgiwrap не могу запустить
Коллеги, снимите с ручника пожалуйста, что не так?

nginx (FreeBSD 11.2, nginx-1.14.1_1,2) при обращении к /cgi-bin/test
возвращает "403 Forbidden". Самое странное, что в error.log по этому
поводу ничего не пишется. В access.log есть совершенно неинформативное

2001:470:35:7af::2 - - [22/Jan/2019:23:37:46 +0700] "GET /cgi-bin/test HTTP/1.1" 403 25 "-" "Mozilla/5.0 (X11; FreeBSD amd64; rv:64.0) Gecko/20100101 Firefox/64.0"

Чего ему не хватает? И как хотя бы включить ошибки в error.log?

nginx.conf:

        location /cgi-bin/ {
            root   /usr/local/www/cgi-bin;
            include /usr/local/etc/nginx/fastcgi_params;
            fastcgi_pass unix:/tmp/fcgiwrap.socket;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        }


# ls -al /tmp/fcgiwrap.socket
srw-------  1 www  wheel  0 22 янв.  23:33 /tmp/fcgiwrap.socket


rc.conf.local:

fcgiwrap_enable="YES"
fcgiwrap_socket_owner="www"
fcgiwrap_user="www"
fcgiwrap_socket="unix:/tmp/fcgiwrap.socket"
fcgiwrap_socket_mode="0600"


# ls -al /usr/local/www/cgi-bin
total 12
drwxr-xr-x  2 root  wheel  512 22 янв.  22:58 .
drwxr-xr-x  4 root  wheel  512 22 янв.  22:56 ..
-rwxr-xr-x  1 root  wheel  103 22 янв.  22:58 test

# ps axwwu | grep cgi
www      85035   0,0  0,1   6388  1808  -  Is   00:11           0:00,00 daemon: /usr/local/sbin/fcgiwrap[85037] (daemon)
www      85037   0,0  0,1   6356  1832  -  I    00:11           0:00,00 /usr/local/sbin/fcgiwrap -s unix:/tmp/fcgiwrap.socket


Если сказать
su -m www -c 'telnet /tmp/fcgiwrap.socket'
то соединяется с fastcgi-сервером (я правда не знаю, какую команду там
сказать можно, но права доступа к сокету у www явно есть).

--
Victor Sudakov,  VAS4-RIPE, VAS47-RIPN
2:5005/49@fidonet http://vas.tomsk.ru/




---------- Forwarded message ----------
From: Victor Sudakov <vas@mpeks.tomsk.su>
To: nginx-ru@nginx.org
Cc: 
Bcc: 
Date: Wed, 23 Jan 2019 01:02:01 +0700
Subject: Re: fcgiwrap не могу запустить
Victor Sudakov wrote:
>
>
> Если сказать
> su -m www -c 'telnet /tmp/fcgiwrap.socket'
> то соединяется с fastcgi-сервером (я правда не знаю, какую команду там
> сказать можно, но права доступа к сокету у www явно есть).

FastCGI server сам по себе однако работает:

# ~/bin/debug_cgi.sh
+ SCRIPT_FILENAME=/usr/local/www/cgi-bin/test
+ export SCRIPT_FILENAME
+ REQUEST_URI=/test
+ export REQUEST_URI
+ REQUEST_METHOD=GET
+ export REQUEST_METHOD
+ su -m www -c '/usr/local/bin/cgi-fcgi -bind -connect /tmp/fcgiwrap.socket'
Content-type: text/plain

This is a test script
This is a test script
This is a test script
This is a test script
This is a test script
This is a test script
This is a test script


--
Victor Sudakov,  VAS4-RIPE, VAS47-RIPN
2:5005/49@fidonet http://vas.tomsk.ru/




---------- Forwarded message ----------
From: Victor Sudakov <vas@mpeks.tomsk.su>
To: nginx-ru@nginx.org
Cc: 
Bcc: 
Date: Wed, 23 Jan 2019 15:36:23 +0700
Subject: Re: fcgiwrap не могу запустить
fcgiwrap с ключом -f маленько прояснил ситуацию, имею теперь сообщение
об ошибке в логе nginx:

2019/01/23 15:29:36 [error] 93721#100134: *5 FastCGI sent in stderr: "Cannot get script name, are DOCUMENT_ROOT and SCRIPT_NAME (or SCRIPT_FILENAME) set and is the script executable?" while reading response header from upstream, client: 10.10.10.3, server: , request: "GET /cgi-bin/test HTTP/1.1", upstream: "fastcgi://unix:/tmp/fcgiwrap.socket:", host: "admin.sibptus.ru"

С учетом нижепоказанного, чего ещё недостаёт?

        location /cgi-bin/ {
            root   /usr/local/www/cgi-bin;
            include /usr/local/etc/nginx/fastcgi_params;
            fastcgi_pass unix:/tmp/fcgiwrap.socket;
        }


$ egrep 'DOCUMENT_ROOT|SCRIPT_NAME' /usr/local/etc/nginx/fastcgi_params
fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
fastcgi_param  DOCUMENT_ROOT      $document_root;

$ ls -al /usr/local/www/cgi-bin
total 12
drwxr-xr-x  2 root  wheel  512 23 янв.  00:58 .
drwxr-xr-x  4 root  wheel  512 22 янв.  22:56 ..
-rwxr-xr-x  1 root  wheel  313 23 янв.  00:58 test




--
Victor Sudakov,  VAS4-RIPE, VAS47-RIPN
2:5005/49@fidonet http://vas.tomsk.ru/

_______________________________________________
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru