Quantcast
Channel: Nginx Forum
Viewing all 53287 articles
Browse latest View live

[njs] Fixed njs_string_slice().

$
0
0
details: http://hg.nginx.org/njs/rev/85f57cc123c2
branches:
changeset: 605:85f57cc123c2
user: Dmitry Volyntsev <xeioex@nginx.com>
date: Fri Sep 14 14:19:03 2018 +0300
description:
Fixed njs_string_slice().

dst retval argument was ignored.

diffstat:

njs/njs_string.c | 6 +++---
njs/njs_string.h | 2 +-
2 files changed, 4 insertions(+), 4 deletions(-)

diffs (37 lines):

diff -r c4f9a4948697 -r 85f57cc123c2 njs/njs_string.c
--- a/njs/njs_string.c Thu Sep 13 18:46:02 2018 +0300
+++ b/njs/njs_string.c Fri Sep 14 14:19:03 2018 +0300
@@ -1288,7 +1288,7 @@ njs_string_slice_args(njs_slice_prop_t *

nxt_noinline njs_ret_t
njs_string_slice(njs_vm_t *vm, njs_value_t *dst,
- const njs_string_prop_t *string, njs_slice_prop_t *slice)
+ const njs_string_prop_t *string, const njs_slice_prop_t *slice)
{
size_t size, n, length;
const u_char *p, *start, *end;
@@ -1325,10 +1325,10 @@ njs_string_slice(njs_vm_t *vm, njs_value
}

if (nxt_fast_path(size != 0)) {
- return njs_string_new(vm, &vm->retval, start, size, length);
+ return njs_string_new(vm, dst, start, size, length);
}

- vm->retval = njs_string_empty;
+ *dst = njs_string_empty;

return NXT_OK;
}
diff -r c4f9a4948697 -r 85f57cc123c2 njs/njs_string.h
--- a/njs/njs_string.h Thu Sep 13 18:46:02 2018 +0300
+++ b/njs/njs_string.h Fri Sep 14 14:19:03 2018 +0300
@@ -146,7 +146,7 @@ njs_ret_t njs_string_constructor(njs_vm_
nxt_bool_t njs_string_eq(const njs_value_t *val1, const njs_value_t *val2);
nxt_int_t njs_string_cmp(const njs_value_t *val1, const njs_value_t *val2);
njs_ret_t njs_string_slice(njs_vm_t *vm, njs_value_t *dst,
- const njs_string_prop_t *string, njs_slice_prop_t *slice);
+ const njs_string_prop_t *string, const njs_slice_prop_t *slice);
const u_char *njs_string_offset(const u_char *start, const u_char *end,
size_t index);
nxt_noinline uint32_t njs_string_index(njs_string_prop_t *string,
_______________________________________________
nginx-devel mailing list
nginx-devel@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-devel

Re: nginx as nonroot - setsockopt not permitted

$
0
0
Hello!

On Fri, Sep 14, 2018 at 03:52:03AM -0400, orsolya.magos wrote:

> we use nginx which load-balances toward our snmptrapd. Everything is working
> fine if we start nginx with root. We would like to change it so nginx
> (workers) would start with nginx user. I couldn't make it work, do you have
> any idea what additional thing can I set/check?
>
> nginx -V
> nginx version: nginx/1.12.2
> built by gcc 4.8.5 20150623 (Red Hat 4.8.5-16) (GCC)

Update to nginx 1.13.8+, it should be able to use transparent
proxying on Linux without workers being run as root:

*) Feature: now nginx automatically preserves the CAP_NET_RAW capability
in worker processes when using the "transparent" parameter of the
"proxy_bind", "fastcgi_bind", "memcached_bind", "scgi_bind", and
"uwsgi_bind" directives.

Alternatively, consider not using "proxy_bind ... transparent".
See docs here for additional details:

http://nginx.org/en/docs/stream/ngx_stream_proxy_module.html#proxy_bind

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

Question

$
0
0
>
> I am a new developer and need to publish several database tables with
> relationship one to many, etc,. What web framework is fastest to learn ? I
> am looking at Mojolicios or Catalyst, but don´t know if they are necessary
> or not. For a new project, what parts would you choose? I have read the
> Nginx is the best application server, don´t know if I need anything else.
_______________________________________________
nginx mailing list
nginx@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx

Re: nginx as nonroot - setsockopt not permitted

$
0
0
Wow great, thanks Maxim for the super fast answer!
We are using epel version, still investigating the possibilities of version change.
Br,
Orsi

How to set 2 or more wordpress htaccess on NGINX ?

$
0
0
I have a problem . I have set a nginx+php fpm+redis+maria db on a vps but i am not pretty sure how could i use the information of different htaccess for different websites . I mean i would have 3 websites and i would need 3 different combinations of htaccess . How could i do it , into NGINX ? Any advice, tutorial , guide , or suggestion ? thankks

url escape в логах без внешних модулей

$
0
0
Добрый день.

Существует ли способ заполучить в лог заэкспкейпленные uri и referrer ?
Вариант с escape-json не то, что требуется, к сожалению.

PS. Не планируется ли функционал из модуля (или сам модуль)
https://github.com/openresty/set-misc-nginx-module добавить в nginx ?

--
Рустам
_______________________________________________
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

WWW-Authenticate in 200 OK response

$
0
0
I am currently working on a multi-tier application, trying to use nginx as load balancer.
The issue is that nginx seems to be adding WWW-Authenticate in the 200 OK response after the Kerberos authentication has taken place, which confuses the client. (The client could potentially ignore it, but that's possibly another issue.)
Not sure this is expected... Any suggestion on how to avoid or work around this?

[2018-09-14 14:46:14.471] root INFO: @@@@@@ Connecting to: 'http://host1:39609/url1'
send: 'GET /url1 HTTP/1.1\r\nX-Client-User-Name: uname1\r\nAccept-Encoding: gzip\r\nConnection: close\r\nAccept: application/json\r\nUser-Agent: qz.qzdev.run\r\nHost: host1:39609\r\nX-Client-Host-Name: host2\r\nContent-Type: application/json\r\n\r\n'
reply: 'HTTP/1.1 401 Unauthorized\r\n'
header: Server: nginx/1.14.0
header: Date: Fri, 14 Sep 2018 18:46:14 GMT
header: Content-Type: text/html
header: Content-Length: 195
header: Connection: close
header: WWW-Authenticate: Negotiate
header: WWW-Authenticate: Basic realm=""
header: Access-Control-Allow-Credentials: true
send: 'GET /url1 HTTP/1.1\r\nX-Client-User-Name: uname1\r\nAccept-Encoding: gzip\r\nConnection: close\r\nAccept: application/json\r\nUser-Agent: qz.qzdev.run\r\nHost: host1:39609\r\nX-Client-Host-Name: host2\r\nContent-Type: application/json\r\nAuthorization: Negotiate YII........................ AghEw==\r\n\r\n'
reply: 'HTTP/1.1 200 OK\r\n'
header: Server: nginx/1.14.0
header: Date: Fri, 14 Sep 2018 18:46:14 GMT
header: Content-Type: application/json
header: Content-Length: 430908
header: Connection: close
header: WWW-Authenticate: Negotiate YI .....gA==
header: WWW-Authenticate: Basic realm=""
header: Set-Cookie: session=ey...ZW4; HttpOnly; Path=/
header: Access-Control-Allow-Credentials: true
[2018-09-14 14:46:14.779] client_http_auth CRITICAL: GSSAPI failed!

Best regards,
George

----------------------------------------------------------------------
This message, and any attachments, is for the intended recipient(s) only, may contain information that is privileged, confidential and/or proprietary and subject to important terms and conditions available at http://www.bankofamerica.com/emaildisclaimer. If you are not the intended recipient, please delete this message.
_______________________________________________
nginx mailing list
nginx@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx

Re: WWW-Authenticate in 200 OK response

$
0
0
Hello!

On Fri, Sep 14, 2018 at 08:59:16PM +0000, Nica, George via nginx wrote:

> I am currently working on a multi-tier application, trying to use nginx as load balancer.
> The issue is that nginx seems to be adding WWW-Authenticate in the 200 OK response after the Kerberos authentication has taken place, which confuses the client. (The client could potentially ignore it, but that's possibly another issue.)
> Not sure this is expected... Any suggestion on how to avoid or work around this?
>
> [2018-09-14 14:46:14.471] root INFO: @@@@@@ Connecting to: 'http://host1:39609/url1'
> send: 'GET /url1 HTTP/1.1\r\nX-Client-User-Name: uname1\r\nAccept-Encoding: gzip\r\nConnection: close\r\nAccept: application/json\r\nUser-Agent: qz.qzdev.run\r\nHost: host1:39609\r\nX-Client-Host-Name: host2\r\nContent-Type: application/json\r\n\r\n'
> reply: 'HTTP/1.1 401 Unauthorized\r\n'
> header: Server: nginx/1.14.0
> header: Date: Fri, 14 Sep 2018 18:46:14 GMT
> header: Content-Type: text/html
> header: Content-Length: 195
> header: Connection: close
> header: WWW-Authenticate: Negotiate
> header: WWW-Authenticate: Basic realm=""
> header: Access-Control-Allow-Credentials: true
> send: 'GET /url1 HTTP/1.1\r\nX-Client-User-Name: uname1\r\nAccept-Encoding: gzip\r\nConnection: close\r\nAccept: application/json\r\nUser-Agent: qz.qzdev.run\r\nHost: host1:39609\r\nX-Client-Host-Name: host2\r\nContent-Type: application/json\r\nAuthorization: Negotiate YII........................ AghEw==\r\n\r\n'
> reply: 'HTTP/1.1 200 OK\r\n'
> header: Server: nginx/1.14.0
> header: Date: Fri, 14 Sep 2018 18:46:14 GMT
> header: Content-Type: application/json
> header: Content-Length: 430908
> header: Connection: close
> header: WWW-Authenticate: Negotiate YI .....gA==
> header: WWW-Authenticate: Basic realm=""
> header: Set-Cookie: session=ey...ZW4; HttpOnly; Path=/
> header: Access-Control-Allow-Credentials: true
> [2018-09-14 14:46:14.779] client_http_auth CRITICAL: GSSAPI failed!

It looks like you are trying to use "WWW-Authenticate: Negotiate"
AKA Integrated Windows Authentication, AKA NTLM authentication.

Unfortunately, this authentication scheme was designed without
following HTTP basic concepts, and authenticates a connection
instead of requests. As such, this authentication scheme cannot
work though a generic HTTP proxy. For NTLM authentication to work
though a proxy, it needs to keep connections to the backend server
alive and bound to corresponding client connections.

The best solution would be to avoid using NTLM authentication for
anything more complex than directly connected servers in
intranets.

If you can't do this for some reason, consider using the "ntlm"
directive, which is available as part of our commercial version,
see http://nginx.org/r/ntlm.

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

Re: OCSP stapling in Nginx >=1.3.7

$
0
0
On 12.09.2018 17:36, Maxim Dounin wrote:

>>>>>>> Лучше всего - сделать так, чтобы OpenSSL научился проверять
>>>>>>> OCSP-ответы не полной цепочкой сертификатов вплоть до доверенного
>>>>>>> root'а, а ровно так, как и должно быть по стандарту - с помощью
>>>>>>> одного только сертификата issuer'а. Тогда проблема исчезнет.

Задал вопрос по этому поводу в списке рассылки openssl-users:
https://mta.openssl.org/pipermail/openssl-users/2018-September/008795.html
- пока что мне там никто ничего так и не ответил.

>>> В зависимости от того, каким сертификатом подписан OCSP-ответ -
>>> этого может быть достаточно или нет. RFC 6960 допускает два
>>> варианта подписи в OCSP-ответах:

>>> - issuer подписывает OCSP-ответ сам; или
>>> - issuer выпускает сертификат, которым подписываются OCSP-ответы
>>> (и этот сертификат включается в OCSP-ответ).

>>> В обоих случаях для проверки OCSP-ответа достаточно знать
>>> issuer'а, однако второй случай в OpenSSL не работает (впрочем, я
>>> давно не порверял; но если верить "документации", в этом месте
>>> ничего не зименилось). При этом по понятным причинам мало кто
>>> использует собственно CA для подписи OCSP-ответов, соответственно
>>> не работает это приблизительно всегда.

Проверил второй случай, openssl-1.0.2k из CentOS 7.5 все работает:

1. Получаю сертификат сервера (0) и сертификат issuer'а (1):
openssl s_client -showcerts -connect www.godaddy.com:443 < /dev/null | less

Сертификат сервера сохраняю в файл www.godaddy.com-cert.pem
а сертификат issuer'а - в файл www.godaddy.com-issuer.pem

2. Узнаю OCSP URI, это http://ocsp.godaddy.com/
openssl x509 -text -noout -in www.godaddy.com-cert.pem | less

3. Делаю запрос на получение OCSP ответа от этого сервера:
openssl ocsp -verify_other www.godaddy.com-issuer.pem -issuer
www.godaddy.com-issuer.pem -cert www.godaddy.com-cert.pem -text -url
http://ocsp.godaddy.com/ -header "Host" "ocsp.godaddy.com" | less

Из ответа видно, что для подписи используется отдельный сертификат
Go Daddy Validation Authority - G2, при этом "Response verify OK",
то есть OpenSSL может проверить ответ сервера и в этом случае.

Если убрать параметр '-verify_other www.godaddy.com-issuer.pem'
тогда возвращается сообщение про ошибку:

Response Verify Failure
140345419933584:error:27069065:OCSP
routines:OCSP_basic_verify:certificate verify
error:ocsp_vfy.c:138:Verify error:unable to get local issuer certificate

Получается, что OpenSSL уже очень давно умеет проверять
OCSP-ответ с помощью одного только сертификата issuer'а?

>>>> Насколько я понял из предыдущего обсуждения, нет разумных причин,
>>>> чтобы выключать использование OCSP stapling и ocsp_stapling_verify.
>>>>
>>>> И вместе с тем, есть причины, чтобы их включать:
>>>> OCSP stapling - сайт у клиентов будет открываться быстрее.
>>>> ocsp_stapling_verify - не будет проблем с неразумными браузерами.
>>
>>> Про "быстрее" - есть нюансы. В частности, OCSP-ответ отправляется
>>> клиенту, пытающемуся использовать OCSP stapling, в каждом
>>> SSL handshake'е (а это местами может быть больно с точки зрения latency, не
>>> говоря уже про трафик), в то время как в значительной части
>>> случаев он клиенту на самом деле не нужен (например, уже есть в
>>> кэше).

Почему это может быть больно с точки зрения latency? Ведь nginx держит
OCSP-ответ в своей памяти и отдает его клиенту практически мгновенно.
Этот ответ как правило валиден от 24 часов до 7 или даже 14 дней.

Трафик - это дополнительный килобайт, максимум два килобайта.
Разве это много? Страница сайта весит от сотен килобайт
до нескольких мегабайт, и 1-2 килобайта роли не играют.

Если OCSP-статус сертификата клиенту не нужен,
зачем же в таком случае клиент его постоянно запрашивает?

Это же клиент решает, получать ему OCSP-статус сертификата или нет.

Вот ответ сервера, если OCSP-статус не запрашивать:

openssl s_client -showcerts -connect www.godaddy.com:443 < /dev/null | less

А вот ответ сервера, если OCSP-статус запрашивать:

openssl s_client -showcerts -status -connect www.godaddy.com:443 <
/dev/null | less

Если глупый клиент постоянно запрашивает OCSP-статус сертификата,
даже в том случае если ему этот статус уже известен и не нужен
- это наверное не проблемы сервера, а проблемы самого клиента.
(И исправлять эту проблему надо на клиенте а не на сервере)

>> Открытие сайта по HTTPS без OCSP Stapling подразумевает,
>> что браузер сам будет проверять не отозван ли сертификат сервера.
>> Клиент в это время будет сидеть перед монитором и ждать открытия сайта.

> Или не будет - см. пример в скобках.

Обычно веб-мастера стараются максимально ускорить первое открытие сайта
клиентом. Потому что если сайт будет открываться долго, например, 5 или
10 секунд - пользователь этого может просто не дождаться и уйти.

При первом открытии сайта - OCSP-ответа точно нет в кэше клиента.

>>> Про verify - тоже есть нюансы. Дискуссия, если я её правильно
>>> понял, как раз о том, что включать verify обходится дороже с
>>> административной точки зрения, чем хотелось бы. При этом плюсы -
>>> призрачны, ибо защищают от атак, которых на практике не бывает
>>> (а если бы они были - браузеры бы давно исправились).
>>
>> В начале дискуссии вопрос был о том, почему для того чтобы директива
>> ssl_stapling_verify on; нормально работала необходимо также прописывать
>> ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;
>> если содержимое файла chain.pem можно получить из файла fullchain.pem
>> выбросив оттуда первый сертификат, который является сертификатом сайта?
>
> И ответ на этот вопрос - потому что интерфейс проверки сертификатов
> кривой, и требует массы дополнительных приседаний, чтобы работать.
> Именно поэтому по умолчанию используется ssl_stapling_verify off.

Передать библиотеке OpenSSL сертификат issuer'а два раза,
в параметрах -issuer и -verify_other - это не выглядит очень сложным.

> Кроме того, если у вас в ssl_certificate указана полная цепочка,
> включая сертификат root CA, то это неправильно. Root-сертификат у
> клиентов и так есть, отправлять клиентам его - бессмысленная трата
> ресурсов, соответственно и включать его в цепочку в
> ssl_certificate - не надо.

У меня сертификат получен с помощью certbot,
"Let’s Encrypt Authority X3" - это промежуточный сертификат.
Он подписан с помощью "DST Root CA X3", подробности здесь:
https://letsencrypt.org/certificates/

В конфиге nginx прописано

ssl_stapling on;
ssl_stapling_verify on;
resolver 127.0.0.1;

ssl_certificate /etc/letsencrypt/live/.../fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/.../privkey.pem;

Директива ssl_trusted_certificate вообще нигде в конфиге не указана,
при этом - nginx не пишет в лог никаких ошибок верификации сертификата.

> Если же root-сертификата в цепочке нет, то получить из
> ssl_certificate полную цепочку, включая root, по очевидным
> причинам не получится, и ssl_stapling_verify работать не будет.

Почему же в таком случае nginx не пишет в лог никаких ошибок?
Версия 1.15.3, пакет из официального репозитория nginx.org

>>> Единственное несомненное преимущество OCSP stapling'а
>>> - это меньшая нагрузка на инфраструктуру CA

Let’s Encrypt дает мне SSL-сертификаты полностью бесплатно,
с моей стороны нормально будет в ответ уменьшить нагрузку
на их сервера, включив OCSP stapling для всех сайтов.

Если же я выключу OCSP stapling, тогда я буду в чем-то
похож на персонажа басни Крылова "Свинья под дубом".

Кроме того, например, Майкрософт включает OCSP stapling
в своем веб-сервере IIS по-умолчанию уже очень давно.

Они же это делают не для того, чтобы навредить своим клиентам,
а наоборот, чтобы сайты их клиентов открывались еще быстрее?

P.S.

Кстати, пользователи жалуются, что есть BUG в nginx,
связанный с сертификатами с флагом "OCSP Must Staple":
https://blog.crashed.org/nginx-stapling-busted/

--
Best regards,
Gena

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

How to Improve SEO with HTTPS and NGINX

$
0
0
On 11.09.2018 6:21, Maxim Dounin wrote:

>>>> ssl_stapling on;
>>>> ssl_stapling_verify on;
>>>> resolver 8.8.8.8 1.1.1.1 9.9.9.9 ipv6=off;

>>> Just a side note: использование сторонних DNS-серверов - это
>>> плохое решение. Цитируя документацию:

>>> : Для предотвращения DNS-спуфинга рекомендуется использовать
>>> : DNS-серверы в защищённой доверенной локальной сети.

>> Разве сервера 8.8.8.8, 1.1.1.1 и 9.9.9.9 подвержены атаке DNS spoofing?
>> https://en.wikipedia.org/wiki/DNS_spoofing

> Речь не о том, подвержены ли эти сервера атакам. Речь о том, что
> при использовании не-локальных DNS-серверов в некотороых случаях
> становятся возможны атаки на resolver nginx'а, так как он общается
> с удалённым DNS-сервером - то есть, фактически, открыт для всего
> мира с точностью до номера порта и 16-битного query id, ибо
> spoofing IP-адреса в UDP-пакетах проблемы не представляет.

Кстати, на сайте www.nginx.com предлагается использовать
в конфиге ресолверы 8.8.8.8 и 8.8.4.4. Вот в этой статье:

https://www.nginx.com/blog/improve-seo-https-nginx/
How to Improve SEO with HTTPS and NGINX

ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /etc/nginx/cert/trustchain.crt;
resolver 8.8.8.8 8.8.4.4 valid=300s;

Если включено ssl_stapling_verify on; - тогда вроде бы нет проблем
с DNS-спуфингом, поскольку nginx будет отбрасывать те OCSP-ответы,
которые он не сможет проверить и уязвимости в данном случае не будет?

--
Best regards,
Gena

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

Re: OCSP stapling in Nginx >=1.3.7

$
0
0
Hello!

On Sat, Sep 15, 2018 at 02:35:35PM +0300, Gena Makhomed wrote:

> On 12.09.2018 17:36, Maxim Dounin wrote:
>
> >>>>>>> Лучше всего - сделать так, чтобы OpenSSL научился проверять
> >>>>>>> OCSP-ответы не полной цепочкой сертификатов вплоть до доверенного
> >>>>>>> root'а, а ровно так, как и должно быть по стандарту - с помощью
> >>>>>>> одного только сертификата issuer'а. Тогда проблема исчезнет.
>
> Задал вопрос по этому поводу в списке рассылки openssl-users:
> https://mta.openssl.org/pipermail/openssl-users/2018-September/008795.html
> - пока что мне там никто ничего так и не ответил.
>
> >>> В зависимости от того, каким сертификатом подписан OCSP-ответ -
> >>> этого может быть достаточно или нет. RFC 6960 допускает два
> >>> варианта подписи в OCSP-ответах:
>
> >>> - issuer подписывает OCSP-ответ сам; или
> >>> - issuer выпускает сертификат, которым подписываются OCSP-ответы
> >>> (и этот сертификат включается в OCSP-ответ).
>
> >>> В обоих случаях для проверки OCSP-ответа достаточно знать
> >>> issuer'а, однако второй случай в OpenSSL не работает (впрочем, я
> >>> давно не порверял; но если верить "документации", в этом месте
> >>> ничего не зименилось). При этом по понятным причинам мало кто
> >>> использует собственно CA для подписи OCSP-ответов, соответственно
> >>> не работает это приблизительно всегда.
>
> Проверил второй случай, openssl-1.0.2k из CentOS 7.5 все работает:
>
> 1. Получаю сертификат сервера (0) и сертификат issuer'а (1):
> openssl s_client -showcerts -connect www.godaddy.com:443 < /dev/null | less
>
> Сертификат сервера сохраняю в файл www.godaddy.com-cert.pem
> а сертификат issuer'а - в файл www.godaddy.com-issuer.pem
>
> 2. Узнаю OCSP URI, это http://ocsp.godaddy.com/
> openssl x509 -text -noout -in www.godaddy.com-cert.pem | less
>
> 3. Делаю запрос на получение OCSP ответа от этого сервера:
> openssl ocsp -verify_other www.godaddy.com-issuer.pem -issuer
> www.godaddy.com-issuer.pem -cert www.godaddy.com-cert.pem -text -url
> http://ocsp.godaddy.com/ -header "Host" "ocsp.godaddy.com" | less
>
> Из ответа видно, что для подписи используется отдельный сертификат
> Go Daddy Validation Authority - G2, при этом "Response verify OK",
> то есть OpenSSL может проверить ответ сервера и в этом случае.
>
> Если убрать параметр '-verify_other www.godaddy.com-issuer.pem'
> тогда возвращается сообщение про ошибку:
>
> Response Verify Failure
> 140345419933584:error:27069065:OCSP
> routines:OCSP_basic_verify:certificate verify
> error:ocsp_vfy.c:138:Verify error:unable to get local issuer certificate
>
> Получается, что OpenSSL уже очень давно умеет проверять
> OCSP-ответ с помощью одного только сертификата issuer'а?

Получается, что в CentOS 7.5 есть bundle с доверенными корневыми
сертификатами, который используется openssl по умолчанию. Если
его отключить - указав параметры -CAfile и -CApath явно - то
валидация сломается.

> >>>> Насколько я понял из предыдущего обсуждения, нет разумных причин,
> >>>> чтобы выключать использование OCSP stapling и ocsp_stapling_verify.
> >>>>
> >>>> И вместе с тем, есть причины, чтобы их включать:
> >>>> OCSP stapling - сайт у клиентов будет открываться быстрее.
> >>>> ocsp_stapling_verify - не будет проблем с неразумными браузерами.
> >>
> >>> Про "быстрее" - есть нюансы. В частности, OCSP-ответ отправляется
> >>> клиенту, пытающемуся использовать OCSP stapling, в каждом
> >>> SSL handshake'е (а это местами может быть больно с точки зрения latency, не
> >>> говоря уже про трафик), в то время как в значительной части
> >>> случаев он клиенту на самом деле не нужен (например, уже есть в
> >>> кэше).
>
> Почему это может быть больно с точки зрения latency? Ведь nginx держит
> OCSP-ответ в своей памяти и отдает его клиенту практически мгновенно.
> Этот ответ как правило валиден от 24 часов до 7 или даже 14 дней.
>
> Трафик - это дополнительный килобайт, максимум два килобайта.
> Разве это много? Страница сайта весит от сотен килобайт
> до нескольких мегабайт, и 1-2 килобайта роли не играют.

Дополнительная пара килобайт в начале соедениния - это
потенциальный выход за пределы исходного окна, и соответственно
лишний RTT на соединение.

С получившим сейчас достаточно широкое распространение initcwnd10
(rfc6928, окно до 14k) - скорее всего плохо не будет (но тоже
вопрос, какая цепочка сертификатов при этом стоит), а если
используется более традиционный rfc3390 с окном до 4 килобайт -
как раз из-за stapling'а нарваться на лишний round-trip
элементарно.

Что до трафика, то всё зависит как раз от того, какой в данном
конкретном случае средний трафик передаётся по соединению. И
далеко не везде это сотни килобайт.

> Если OCSP-статус сертификата клиенту не нужен,
> зачем же в таком случае клиент его постоянно запрашивает?
>
> Это же клиент решает, получать ему OCSP-статус сертификата или нет.

Клиент не может знать, нужен ему статус или нет. Более того - он
даже не может знать, какой сертификат ему вернут. Соответственно
если он использует stapling - то в любом полном handshake'е
вынужден получать и stapling тоже.

[...]

> >>> Про verify - тоже есть нюансы. Дискуссия, если я её правильно
> >>> понял, как раз о том, что включать verify обходится дороже с
> >>> административной точки зрения, чем хотелось бы. При этом плюсы -
> >>> призрачны, ибо защищают от атак, которых на практике не бывает
> >>> (а если бы они были - браузеры бы давно исправились).
> >>
> >> В начале дискуссии вопрос был о том, почему для того чтобы директива
> >> ssl_stapling_verify on; нормально работала необходимо также прописывать
> >> ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;
> >> если содержимое файла chain.pem можно получить из файла fullchain.pem
> >> выбросив оттуда первый сертификат, который является сертификатом сайта?
> >
> > И ответ на этот вопрос - потому что интерфейс проверки сертификатов
> > кривой, и требует массы дополнительных приседаний, чтобы работать.
> > Именно поэтому по умолчанию используется ssl_stapling_verify off.
>
> Передать библиотеке OpenSSL сертификат issuer'а два раза,
> в параметрах -issuer и -verify_other - это не выглядит очень сложным.

К сожалению, это работает не так. Точнее - так это не работает.
Всё что можно передать - nginx передаёт, но этого недостаточно,
если OCSP-ответы подписаны с использованием промежуточного
сертификата.

> > Кроме того, если у вас в ssl_certificate указана полная цепочка,
> > включая сертификат root CA, то это неправильно. Root-сертификат у
> > клиентов и так есть, отправлять клиентам его - бессмысленная трата
> > ресурсов, соответственно и включать его в цепочку в
> > ssl_certificate - не надо.
>
> У меня сертификат получен с помощью certbot,
> "Let’s Encrypt Authority X3" - это промежуточный сертификат.
> Он подписан с помощью "DST Root CA X3", подробности здесь:
> https://letsencrypt.org/certificates/
>
> В конфиге nginx прописано
>
> ssl_stapling on;
> ssl_stapling_verify on;
> resolver 127.0.0.1;
>
> ssl_certificate /etc/letsencrypt/live/.../fullchain.pem;
> ssl_certificate_key /etc/letsencrypt/live/.../privkey.pem;
>
> Директива ssl_trusted_certificate вообще нигде в конфиге не указана,
> при этом - nginx не пишет в лог никаких ошибок верификации сертификата.

Потому что letsencrypt - подписывает OCSP-ответы непосредственно
issuer'ом, не используя промежуточный сертфикат. Соответственно
для него - ssl_stapling_verify работает без дополнительных
приседаний, хватает сертифката issuer'а, который nginx достаёт из
цепочки ssl_certificate.

К сожалению, это далеко не всегда так. И к ещё большему сожалению -
никто не гарантирует, что в один прекрасный момент это не
перестанет быть так и для letsencrypt тоже.

[...]

> Кстати, пользователи жалуются, что есть BUG в nginx,
> связанный с сертификатами с флагом "OCSP Must Staple":
> https://blog.crashed.org/nginx-stapling-busted/

Потому что "Must Staple" - это попытка превратить OCSP stapling из
механизма оптимизации в обязательный механизм, аналогичный
короткоживущим сертификатам. Не сюрприз, что так не работает -
требования совершенно разные.

Любители Must Staple общаются в траке в двух тикетах:

https://trac.nginx.org/nginx/ticket/812
https://trac.nginx.org/nginx/ticket/990

Пока что они делают это с нулевым полезным выходом.

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

Re: How to Improve SEO with HTTPS and NGINX

$
0
0
Hello!

On Sat, Sep 15, 2018 at 06:20:40PM +0300, Gena Makhomed wrote:

> On 11.09.2018 6:21, Maxim Dounin wrote:
>
> >>>> ssl_stapling on;
> >>>> ssl_stapling_verify on;
> >>>> resolver 8.8.8.8 1.1.1.1 9.9.9.9 ipv6=off;
>
> >>> Just a side note: использование сторонних DNS-серверов - это
> >>> плохое решение. Цитируя документацию:
>
> >>> : Для предотвращения DNS-спуфинга рекомендуется использовать
> >>> : DNS-серверы в защищённой доверенной локальной сети.
>
> >> Разве сервера 8.8.8.8, 1.1.1.1 и 9.9.9.9 подвержены атаке DNS spoofing?
> >> https://en.wikipedia.org/wiki/DNS_spoofing
>
> > Речь не о том, подвержены ли эти сервера атакам. Речь о том, что
> > при использовании не-локальных DNS-серверов в некотороых случаях
> > становятся возможны атаки на resolver nginx'а, так как он общается
> > с удалённым DNS-сервером - то есть, фактически, открыт для всего
> > мира с точностью до номера порта и 16-битного query id, ибо
> > spoofing IP-адреса в UDP-пакетах проблемы не представляет.
>
> Кстати, на сайте www.nginx.com предлагается использовать
> в конфиге ресолверы 8.8.8.8 и 8.8.4.4. Вот в этой статье:
>
> https://www.nginx.com/blog/improve-seo-https-nginx/
> How to Improve SEO with HTTPS and NGINX
>
> ssl_stapling on;
> ssl_stapling_verify on;
> ssl_trusted_certificate /etc/nginx/cert/trustchain.crt;
> resolver 8.8.8.8 8.8.4.4 valid=300s;

Наши маркетологи - к сожалению, далеко не всегда пишут то, что
действительно стоит использовать.

> Если включено ssl_stapling_verify on; - тогда вроде бы нет проблем
> с DNS-спуфингом, поскольку nginx будет отбрасывать те OCSP-ответы,
> которые он не сможет проверить и уязвимости в данном случае не будет?

Не стоит путать отсутствие проблем и наличие механизма,
позволяющего минимизировать ущерб.

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

How to use dynamic IP in resolver directive when NGINX installed on Multi Nodes Openshift cluster

$
0
0
Hi,

We're from Amdocs and trying to install NGINX reverse proxy server on openshift cluster (6 nodes), and as part of its configuration, we must specify the DNS IP to directive - 'resolver' (because proxy_pass has some parameters).
Nginx.conf:
Location ~ {
resolver DNS_IP valid=5s;
proxy_pass .....
}
But - since it's OCP cluster (multiple machines), we don't know which IP to give - as it depends on which node the nginx pod was started (in /etc/resolv.conf - it has the relevant node IP). Also - we cannot put all IPs in parameters.
We ask for advice to:

1. How we can force nginx to user /etc/resolv.conf even if proxy_pass has parameters. This will solve our issues.

2. If #1 is not possible, which display name we can put for resolver within open-shift cluster ? for example - in K8S, we solved the issue by using kube-dns:
resolver kube-dns.kube-system.svc.cluster.local valid=5s;

Which string is relevant for DNS inside open-shift cluster ?

Please assist.


Thanks,
Marwan

This message and the information contained herein is proprietary and confidential and subject to the Amdocs policy statement,

you may review at https://www.amdocs.com/about/email-disclaimer https://www.amdocs.com/about/email-disclaimer
_______________________________________________
nginx mailing list
nginx@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx

Re: OCSP stapling in Nginx >=1.3.7

$
0
0
пн, 17 сент. 2018 г. в 4:37, Maxim Dounin <mdounin@mdounin.ru>:

> Hello!
>
> On Sat, Sep 15, 2018 at 02:35:35PM +0300, Gena Makhomed wrote:
>
> > On 12.09.2018 17:36, Maxim Dounin wrote:
> >
> > >>>>>>> Лучше всего - сделать так, чтобы OpenSSL научился проверять
> > >>>>>>> OCSP-ответы не полной цепочкой сертификатов вплоть до доверенного
> > >>>>>>> root'а, а ровно так, как и должно быть по стандарту - с помощью
> > >>>>>>> одного только сертификата issuer'а. Тогда проблема исчезнет.
> >
> > Задал вопрос по этому поводу в списке рассылки openssl-users:
> >
> https://mta.openssl.org/pipermail/openssl-users/2018-September/008795.html
> > - пока что мне там никто ничего так и не ответил.
> >
> > >>> В зависимости от того, каким сертификатом подписан OCSP-ответ -
> > >>> этого может быть достаточно или нет. RFC 6960 допускает два
> > >>> варианта подписи в OCSP-ответах:
> >
> > >>> - issuer подписывает OCSP-ответ сам; или
> > >>> - issuer выпускает сертификат, которым подписываются OCSP-ответы
> > >>> (и этот сертификат включается в OCSP-ответ).
> >
> > >>> В обоих случаях для проверки OCSP-ответа достаточно знать
> > >>> issuer'а, однако второй случай в OpenSSL не работает (впрочем, я
> > >>> давно не порверял; но если верить "документации", в этом месте
> > >>> ничего не зименилось). При этом по понятным причинам мало кто
> > >>> использует собственно CA для подписи OCSP-ответов, соответственно
> > >>> не работает это приблизительно всегда.
> >
> > Проверил второй случай, openssl-1.0.2k из CentOS 7.5 все работает:
> >
> > 1. Получаю сертификат сервера (0) и сертификат issuer'а (1):
> > openssl s_client -showcerts -connect www.godaddy.com:443 < /dev/null |
> less
> >
> > Сертификат сервера сохраняю в файл www.godaddy.com-cert.pem
> > а сертификат issuer'а - в файл www.godaddy.com-issuer.pem
> >
> > 2. Узнаю OCSP URI, это http://ocsp.godaddy.com/
> > openssl x509 -text -noout -in www.godaddy.com-cert.pem | less
> >
> > 3. Делаю запрос на получение OCSP ответа от этого сервера:
> > openssl ocsp -verify_other www.godaddy.com-issuer.pem -issuer
> > www.godaddy.com-issuer.pem -cert www.godaddy.com-cert.pem -text -url
> > http://ocsp.godaddy.com/ -header "Host" "ocsp.godaddy.com" | less
> >
> > Из ответа видно, что для подписи используется отдельный сертификат
> > Go Daddy Validation Authority - G2, при этом "Response verify OK",
> > то есть OpenSSL может проверить ответ сервера и в этом случае.
> >
> > Если убрать параметр '-verify_other www.godaddy.com-issuer.pem'
> > тогда возвращается сообщение про ошибку:
> >
> > Response Verify Failure
> > 140345419933584:error:27069065:OCSP
> > routines:OCSP_basic_verify:certificate verify
> > error:ocsp_vfy.c:138:Verify error:unable to get local issuer certificate
> >
> > Получается, что OpenSSL уже очень давно умеет проверять
> > OCSP-ответ с помощью одного только сертификата issuer'а?
>
> Получается, что в CentOS 7.5 есть bundle с доверенными корневыми
> сертификатами, который используется openssl по умолчанию. Если
> его отключить - указав параметры -CAfile и -CApath явно - то
> валидация сломается.
>
> > >>>> Насколько я понял из предыдущего обсуждения, нет разумных причин,
> > >>>> чтобы выключать использование OCSP stapling и ocsp_stapling_verify.
> > >>>>
> > >>>> И вместе с тем, есть причины, чтобы их включать:
> > >>>> OCSP stapling - сайт у клиентов будет открываться быстрее.
> > >>>> ocsp_stapling_verify - не будет проблем с неразумными браузерами.
> > >>
> > >>> Про "быстрее" - есть нюансы. В частности, OCSP-ответ отправляется
> > >>> клиенту, пытающемуся использовать OCSP stapling, в каждом
> > >>> SSL handshake'е (а это местами может быть больно с точки зрения
> latency, не
> > >>> говоря уже про трафик), в то время как в значительной части
> > >>> случаев он клиенту на самом деле не нужен (например, уже есть в
> > >>> кэше).
> >
> > Почему это может быть больно с точки зрения latency? Ведь nginx держит
> > OCSP-ответ в своей памяти и отдает его клиенту практически мгновенно.
> > Этот ответ как правило валиден от 24 часов до 7 или даже 14 дней.
> >
> > Трафик - это дополнительный килобайт, максимум два килобайта.
> > Разве это много? Страница сайта весит от сотен килобайт
> > до нескольких мегабайт, и 1-2 килобайта роли не играют.
>
> Дополнительная пара килобайт в начале соедениния - это
> потенциальный выход за пределы исходного окна, и соответственно
> лишний RTT на соединение.
>
> С получившим сейчас достаточно широкое распространение initcwnd10
> (rfc6928, окно до 14k) - скорее всего плохо не будет (но тоже
> вопрос, какая цепочка сертификатов при этом стоит), а если
> используется более традиционный rfc3390 с окном до 4 килобайт -
> как раз из-за stapling'а нарваться на лишний round-trip
> элементарно.
>
> Что до трафика, то всё зависит как раз от того, какой в данном
> конкретном случае средний трафик передаётся по соединению. И
> далеко не везде это сотни килобайт.
>
> > Если OCSP-статус сертификата клиенту не нужен,
> > зачем же в таком случае клиент его постоянно запрашивает?
> >
> > Это же клиент решает, получать ему OCSP-статус сертификата или нет.
>
> Клиент не может знать, нужен ему статус или нет. Более того - он
> даже не может знать, какой сертификат ему вернут. Соответственно
> если он использует stapling - то в любом полном handshake'е
> вынужден получать и stapling тоже.
>
> [...]
>
> > >>> Про verify - тоже есть нюансы. Дискуссия, если я её правильно
> > >>> понял, как раз о том, что включать verify обходится дороже с
> > >>> административной точки зрения, чем хотелось бы. При этом плюсы -
> > >>> призрачны, ибо защищают от атак, которых на практике не бывает
> > >>> (а если бы они были - браузеры бы давно исправились).
> > >>
> > >> В начале дискуссии вопрос был о том, почему для того чтобы директива
> > >> ssl_stapling_verify on; нормально работала необходимо также
> прописывать
> > >> ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;
> > >> если содержимое файла chain.pem можно получить из файла fullchain.pem
> > >> выбросив оттуда первый сертификат, который является сертификатом
> сайта?
> > >
> > > И ответ на этот вопрос - потому что интерфейс проверки сертификатов
> > > кривой, и требует массы дополнительных приседаний, чтобы работать.
> > > Именно поэтому по умолчанию используется ssl_stapling_verify off.
> >
> > Передать библиотеке OpenSSL сертификат issuer'а два раза,
> > в параметрах -issuer и -verify_other - это не выглядит очень сложным.
>
> К сожалению, это работает не так. Точнее - так это не работает.
> Всё что можно передать - nginx передаёт, но этого недостаточно,
> если OCSP-ответы подписаны с использованием промежуточного
> сертификата.
>
> > > Кроме того, если у вас в ssl_certificate указана полная цепочка,
> > > включая сертификат root CA, то это неправильно. Root-сертификат у
> > > клиентов и так есть, отправлять клиентам его - бессмысленная трата
> > > ресурсов, соответственно и включать его в цепочку в
> > > ssl_certificate - не надо.
> >
> > У меня сертификат получен с помощью certbot,
> > "Let’s Encrypt Authority X3" - это промежуточный сертификат.
> > Он подписан с помощью "DST Root CA X3", подробности здесь:
> > https://letsencrypt.org/certificates/
> >
> > В конфиге nginx прописано
> >
> > ssl_stapling on;
> > ssl_stapling_verify on;
> > resolver 127.0.0.1;
> >
> > ssl_certificate /etc/letsencrypt/live/.../fullchain.pem;
> > ssl_certificate_key /etc/letsencrypt/live/.../privkey.pem;
> >
> > Директива ssl_trusted_certificate вообще нигде в конфиге не указана,
> > при этом - nginx не пишет в лог никаких ошибок верификации сертификата.
>
> Потому что letsencrypt - подписывает OCSP-ответы непосредственно
> issuer'ом, не используя промежуточный сертфикат. Соответственно
> для него - ssl_stapling_verify работает без дополнительных
> приседаний, хватает сертифката issuer'а, который nginx достаёт из
> цепочки ssl_certificate.
>
> К сожалению, это далеко не всегда так. И к ещё большему сожалению -
> никто не гарантирует, что в один прекрасный момент это не
> перестанет быть так и для letsencrypt тоже.
>
> [...]
>
> > Кстати, пользователи жалуются, что есть BUG в nginx,
> > связанный с сертификатами с флагом "OCSP Must Staple":
> > https://blog.crashed.org/nginx-stapling-busted/
>
> Потому что "Must Staple" - это попытка превратить OCSP stapling из
> механизма оптимизации в обязательный механизм, аналогичный
> короткоживущим сертификатам. Не сюрприз, что так не работает -
> требования совершенно разные.
>
> Любители Must Staple общаются в траке в двух тикетах:
>
> https://trac.nginx.org/nginx/ticket/812
> https://trac.nginx.org/nginx/ticket/990
>
> Пока что они делают это с нулевым полезным выходом.
>

из этих тикетов, в общем, есть здравое зерно, что было бы неплохо каким-то
проактивным способом уметь получать OCSP ответы.

почему это разумно

1) список сертов более или менее известен (пока что nginx не умеет и не
планировать выпускать серты самостоятельно)
2) это сокращает время доставки контента и делает процедуру более
предсказуемой (по сравнению с тем, когда надо пойти за OCSP ответом в то
время, когда на проводе сидит пользователь)

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


>
> --
> Maxim Dounin
> http://mdounin.ru/
> _______________________________________________
> 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

Upstream with zone directive

$
0
0
Hi!

I am using ngx_lua_upstream module in OpenResty, which is calling ngx_http_get_module_main_conf(r, ngx_http_upstream_module). For some reason, I think the peer data is not correct when the zone directive is used in an upstream. But I am not really sure where in the source the config is parsed and peer/server data is populated.

Can someone please get me some pointers to where I should look or even better if somebody could reaffirm and check the problem.

Br,
Johan

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

[njs] Fixed String.slice() for undefined arguments.

$
0
0
details: http://hg.nginx.org/njs/rev/b00d4680635a
branches:
changeset: 606:b00d4680635a
user: Dmitry Volyntsev <xeioex@nginx.com>
date: Mon Sep 17 18:47:00 2018 +0300
description:
Fixed String.slice() for undefined arguments.

diffstat:

njs/njs_string.c | 65 ++++++++++++++++++++++++-----------------------
njs/test/njs_unit_test.c | 12 ++++++++
2 files changed, 45 insertions(+), 32 deletions(-)

diffs (107 lines):

diff -r 85f57cc123c2 -r b00d4680635a njs/njs_string.c
--- a/njs/njs_string.c Fri Sep 14 14:19:03 2018 +0300
+++ b/njs/njs_string.c Mon Sep 17 18:47:00 2018 +0300
@@ -1236,48 +1236,49 @@ static nxt_noinline void
njs_string_slice_args(njs_slice_prop_t *slice, njs_value_t *args,
nxt_uint_t nargs)
{
- ssize_t start, end, length;
+ ssize_t start, end, length;
+ const njs_value_t *value;

length = slice->string_length;
- start = 0;
-
- if (nargs > 1) {
- start = args[1].data.u.number;
+
+ value = njs_arg(args, nargs, 1);
+ start = value->data.u.number;
+
+ if (start < 0) {
+ start += length;

if (start < 0) {
- start += length;
-
- if (start < 0) {
- start = 0;
- }
+ start = 0;
}
-
- if (start >= length) {
- start = 0;
- length = 0;
+ }
+
+ if (start >= length) {
+ start = 0;
+ length = 0;
+
+ } else {
+ if (!njs_is_void(njs_arg(args, nargs, 2))) {
+ value = njs_arg(args, nargs, 2);
+ end = value->data.u.number;

} else {
end = length;
-
- if (nargs > 2) {
- end = args[2].data.u.number;
-
- if (end < 0) {
- end += length;
- }
+ }
+
+ if (end < 0) {
+ end += length;
+ }
+
+ if (length >= end) {
+ length = end - start;
+
+ if (length < 0) {
+ start = 0;
+ length = 0;
}

- if (length >= end) {
- length = end - start;
-
- if (length < 0) {
- start = 0;
- length = 0;
- }
-
- } else {
- length -= start;
- }
+ } else {
+ length -= start;
}
}

diff -r 85f57cc123c2 -r b00d4680635a njs/test/njs_unit_test.c
--- a/njs/test/njs_unit_test.c Fri Sep 14 14:19:03 2018 +0300
+++ b/njs/test/njs_unit_test.c Mon Sep 17 18:47:00 2018 +0300
@@ -3794,6 +3794,18 @@ static njs_unit_test_t njs_test[] =
{ nxt_string("'abcdefgh'.slice(3)"),
nxt_string("defgh") },

+ { nxt_string("'abcdefgh'.slice(undefined, undefined)"),
+ nxt_string("abcdefgh") },
+
+ { nxt_string("'abcdefgh'.slice(undefined)"),
+ nxt_string("abcdefgh") },
+
+ { nxt_string("'abcdefgh'.slice(undefined, 1)"),
+ nxt_string("a") },
+
+ { nxt_string("'abcdefgh'.slice(3, undefined)"),
+ nxt_string("defgh") },
+
{ nxt_string("'abcde'.slice(50)"),
nxt_string("") },

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

Wordpress/Unbounce on nginx

$
0
0
Hello everyone,

I hope this is the right forum for this, as it relates to settings given for Apache that need translated to nginx configuration syntax.

So our corporate website is running on a server I control, which runs Wordpress on nginx. One of the departments needs Marketing to run some ads that use the Unbounce plugin for landing pages, which doesn't allow direct URLs to external sites without a modification to our nginx configuration. Without it, Wordpress tries to handle the URL redirect instead of passing the complete URL to Unbounce to handle. The visitor is returned with a 404. Unbounce has just been telling me to 'make it not 404' with nginx. Which clearly isn't very helpful.

So their tech support told me it would work if I 'just used the default Wordpress .htaccess.' After quite a bit of pressuring, they gave me a configuration code block that they think should work, but I am unable to figure out how to use it. I'm much more familiar with Apache, but need to make this work in nginx. But realistically, it looks more like a general idea of what they're looking for than actual an nginx config block. This is where my unfamiliarity with nginx blocks me, and if I had time to just learn it, I would but I'm under the gun timewise.

So below is the code block they gave me:

'/<page>/clkn' --> '<wpserver>/<page>/clkn' (click - non-conversion goal)
'/<page>/clkg' --> '<wpserver>/<page>/clkg' (click - conversion goal)
'/<page>/fsg' --> '<wpserver>/<page>/fsg' (form submission - conversion goal)
'/<page>/fsn' --> '<wpserver>/<page>/fsn' (form submission - non-conversion goal)


So basically I think they're telling me I need to add a config block to tell it to add the site's URL as a FQDN to the links that end in /clkn, /clgk, /fsg, and /fsn. So for example, if the landing page URL is http://mysite.com and the landing page is landingpage, they would want it to look for /landingpage/clkn and replace it with https://mysite.com/landingpage/clkn, I think. I'm not really sure.

Or, perhaps, it's easier to just throw in the Apache .htaccess equivalent into the config file? Either way, I believe these would go into a <location> block, which I don't make use of in my nginx configs, so I need to add that as well somehow. I assume pointing to the root of the Wordpress install? If it would help, I can post a copy of my current config file, sanitized for sensitive information.

I've searched various forums, and have seen one or two others with the same question, but nobody responded. I saw other types of questions, but weren't sure if they were relevant or not. I didn't see anything here in the nginx forums that I could make use of.

Any help with this would be immensely appreciated!!


Thanks,

pdxITgirl

Re: Wordpress/Unbounce on nginx

$
0
0
https://www.thegeekstuff.com/2017/08/nginx-rewrite-examples/
https://stackoverflow.com/questions/4329316/how-to-write-a-url-rewrite-in-nginx

RE: WWW-Authenticate in 200 OK response

$
0
0
Thank you Maxim.
We are using Kerberos, on Linux. And per-request authentication, we are not trying to use session-level authentication.
Would the ntlm module help here?
We are already using spnego-http-auth-nginx-module to help with SPNego/GSSAPI.
So our issue/incompatibility seems to be between backend / nginx with spnego-http-auth-nginx-module / client. The first two sending/passing the extra headers on the response and the client getting confused by it.
As you say, nginx is a generic HTTP proxy here, so we will have to figure things out with our server / client / spnego-http-auth-nginx-module.
Are there any other suggested approaches regarding using nginx and Kerberos?

FYI, this is the output of "nginx -V":
nginx version: nginx/1.14.0
built by gcc 7.3.0 (GCC)
built with OpenSSL 1.1.0h 27 Mar 2018
TLS SNI support enabled
configure arguments: --without-http_rewrite_module --without-http_gzip_module --with-http_stub_status_module --with-ld-opt='-L /efs/dist/kerberos/mit/1.14.6/exec/lib' --add-module=spnego-http-auth-nginx-module --with-http_ssl_module --with-openssl=/home/gnica/nginx/1.14.0_2/common/usr/lib/openssl --prefix=/home/gnica/nginx/1.14.0_2/common/usr


-----Original Message-----
From: Maxim Dounin [mailto:mdounin@mdounin.ru]
Sent: Friday, September 14, 2018 7:19 PM
To: Nica, George via nginx <nginx@nginx.org>
Cc: Nica, George <gheorghe.nica@baml.com>
Subject: Re: WWW-Authenticate in 200 OK response

Hello!

On Fri, Sep 14, 2018 at 08:59:16PM +0000, Nica, George via nginx wrote:

> I am currently working on a multi-tier application, trying to use nginx as load balancer.
> The issue is that nginx seems to be adding WWW-Authenticate in the 200 OK response after the Kerberos authentication has taken place, which confuses the client. (The client could potentially ignore it, but that's possibly another issue.)
> Not sure this is expected... Any suggestion on how to avoid or work around this?
>
> [2018-09-14 14:46:14.471] root INFO: @@@@@@ Connecting to: 'https://urldefense.proofpoint.com/v2/url?u=http-3A__host1-3A39609_url1&d=DwIBAg&c=SFszdw3oxIkTvaP4xmzq_apLU3uL-3SxdAPNkldf__Q&r=bLrGf3qOPfa7FwixFKSI5EuEAlEuxbglrK8414lC4wY&m=kmzwidjXfoCyejfnDKRo7J4AmvdWhFwVMc3SrQ5G24k&s=Jgva48bCRs_t1VOn7OxsyjgTLgIcBsIoFnzP9GHdtBI&e='
> send: 'GET /url1 HTTP/1.1\r\nX-Client-User-Name: uname1\r\nAccept-Encoding: gzip\r\nConnection: close\r\nAccept: application/json\r\nUser-Agent: qz.qzdev.run\r\nHost: host1:39609\r\nX-Client-Host-Name: host2\r\nContent-Type: application/json\r\n\r\n'
> reply: 'HTTP/1.1 401 Unauthorized\r\n'
> header: Server: nginx/1.14.0
> header: Date: Fri, 14 Sep 2018 18:46:14 GMT
> header: Content-Type: text/html
> header: Content-Length: 195
> header: Connection: close
> header: WWW-Authenticate: Negotiate
> header: WWW-Authenticate: Basic realm=""
> header: Access-Control-Allow-Credentials: true
> send: 'GET /url1 HTTP/1.1\r\nX-Client-User-Name: uname1\r\nAccept-Encoding: gzip\r\nConnection: close\r\nAccept: application/json\r\nUser-Agent: qz.qzdev.run\r\nHost: host1:39609\r\nX-Client-Host-Name: host2\r\nContent-Type: application/json\r\nAuthorization: Negotiate YII........................ AghEw==\r\n\r\n'
> reply: 'HTTP/1.1 200 OK\r\n'
> header: Server: nginx/1.14.0
> header: Date: Fri, 14 Sep 2018 18:46:14 GMT
> header: Content-Type: application/json
> header: Content-Length: 430908
> header: Connection: close
> header: WWW-Authenticate: Negotiate YI .....gA==
> header: WWW-Authenticate: Basic realm=""
> header: Set-Cookie: session=ey...ZW4; HttpOnly; Path=/
> header: Access-Control-Allow-Credentials: true
> [2018-09-14 14:46:14.779] client_http_auth CRITICAL: GSSAPI failed!

It looks like you are trying to use "WWW-Authenticate: Negotiate"
AKA Integrated Windows Authentication, AKA NTLM authentication.

Unfortunately, this authentication scheme was designed without
following HTTP basic concepts, and authenticates a connection
instead of requests. As such, this authentication scheme cannot
work though a generic HTTP proxy. For NTLM authentication to work
though a proxy, it needs to keep connections to the backend server
alive and bound to corresponding client connections.

The best solution would be to avoid using NTLM authentication for
anything more complex than directly connected servers in
intranets.

If you can't do this for some reason, consider using the "ntlm"
directive, which is available as part of our commercial version,
see https://urldefense.proofpoint.com/v2/url?u=http-3A__nginx.org_r_ntlm&d=DwIBAg&c=SFszdw3oxIkTvaP4xmzq_apLU3uL-3SxdAPNkldf__Q&r=bLrGf3qOPfa7FwixFKSI5EuEAlEuxbglrK8414lC4wY&m=kmzwidjXfoCyejfnDKRo7J4AmvdWhFwVMc3SrQ5G24k&s=V7CbzPjbpkSiNhNIaDR5P5la1fLfM5-MC6MO-KmhKj8&e=.

--
Maxim Dounin
https://urldefense.proofpoint.com/v2/url?u=http-3A__mdounin.ru_&d=DwIBAg&c=SFszdw3oxIkTvaP4xmzq_apLU3uL-3SxdAPNkldf__Q&r=bLrGf3qOPfa7FwixFKSI5EuEAlEuxbglrK8414lC4wY&m=kmzwidjXfoCyejfnDKRo7J4AmvdWhFwVMc3SrQ5G24k&s=56j1udQaqKDK12PhW-jGwz89_8ZMgUhTZ2tCfJDAaSc&e=

----------------------------------------------------------------------
This message, and any attachments, is for the intended recipient(s) only, may contain information that is privileged, confidential and/or proprietary and subject to important terms and conditions available at http://www.bankofamerica.com/emaildisclaimer. If you are not the intended recipient, please delete this message.
_______________________________________________
nginx mailing list
nginx@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx

A fatal 301 redirect...

$
0
0
I did use wrongly a 301 redirect....

I have corrected now, but the redirect remains.

I use wget :

nous@pcouderc:~$ wget https://www.ppp.fr
--2018-09-17 23:52:44--  https://www.ppp.fr/
Resolving www.ppp.fr (www.ppp.fr)... 2a01:e34:eeaf:c5f0::fee6:854e,
78.234.252.95
Connecting to www.ppp.fr
(www.ppp.fr)|2a01:e34:eeaf:c5f0::fee6:854e|:443... connected.
HTTP request sent, awaiting response... 301 Moved Permanently
Location: https://test.ppp.fr/ [following]
--2018-09-17 23:52:44--  https://test.ppp.fr/
Resolving test.ppp.fr (test.ppp.fr)... 2a01:e34:eeaf:c5f0::fee6:854e,
78.234.252.95
Connecting to test.ppp.fr
(test.ppp.fr)|2a01:e34:eeaf:c5f0::fee6:854e|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [text/html]
Saving to: ‘index.html.3’....

In access.log :

2a01:e34:eeaf:c5f0::feb1:b1c9 - - [18/Sep/2018:00:04:34 +0200] "GET /
HTTP/2.0" 200 21511 "-" "Mozilla/5.0 (X11; Linux x86_64)
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.81 Safari/537.36"
2a01:e34:eeaf:c5f0::feb1:b1c9 - - [18/Sep/2018:00:04:34 +0200] "GET
/fuveau.png HTTP/2.0" 404 271 "https://test.ppp.fr/" "Mozilla/5.0 (X11;
Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.81
Safari/537.36"


I am pretty sure that I have removed the fatal redirect, and I have
checked that   the only 301 remaining are on port 80 :
    location / {
        return 301 https://$server_name$request_uri;
    }

So I suppose there is a cache somewhere where nginx keeps its secret and
fatal 301 ? How can I remove it ?

Thanks

PC
_______________________________________________
nginx mailing list
nginx@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx
Viewing all 53287 articles
Browse latest View live


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>