Обратный прокси-сервер Nginx для сервера приложений Jetty через Cloudflare

У меня есть веб-сайт, который использует Cloudflare для защиты и проксирования сайта.

Я использую SSL-сертификат Cloudflare на исходном веб-сервере nginx, поэтому все запросы обрабатываются через HTTPS, и это работает по мере необходимости.

Я настроил сервер Node.js и сервер приложений на основе Jetty, на котором работает Xwiki, на том же физическом сервере, на котором размещен мой веб-сервер Nginx.

Я настроил обратное проксирование nginx через мой файл nginx.conf, чтобы nginx указывал на соответствующий сервер «приложений», когда запрашивается соответствующий URL-адрес, например.

https://SITE-ROOT/node

Этот обратный прокси к моему серверу node.js, работающему на порту 3001 на локальном хосте, с использованием следующих настроек местоположения в моем файле nginx.conf...

location /node {
            proxy_pass         http://192.168.1.69:3001;
            proxy_redirect     off;
            proxy_set_header   Host $host;
            proxy_set_header   X-Real-IP $remote_addr;
            proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header   X-Forwarded-Host $server_name;
            }

Это работает по мере необходимости, и страница node.js обслуживается через HTTPS через общедоступный URL-адрес моих сайтов и через службу CloudFlares.

Когда я пытаюсь сделать то же самое для сайта Xwiki, который работает на сервере приложений Jetty (Java) на локальном хосте через порт 8080, например.

https://SITE-ROOT/xwiki

location /xwiki/ {
            proxy_pass         http://192.168.1.69:8080/xwiki;
            proxy_redirect     off;
            proxy_set_header   X-Real-IP $remote_addr;
            proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header   X-Forwarded-Host $server_name;
            }

Я получаю следующую ошибку:

DNS points to prohibited IP

Unfortunately, it is resolving to an IP address that 
is creating a conflict within Cloudflare's system.

Я не понимаю, почему это происходит, поскольку я ожидаю, что то же самое произойдет с запросом обратного прокси узла.

Единственная разница, о которой я могу думать, заключается в том, что Xwiki работает на сервере приложений Jetty на том же хосте, что и службы nginx и node, и это означает, что nginx и Jetty не могут / не могут рукопожатие таким же образом, как nginx и node могут когда дело доходит до обратного проксирования...

Если я укажу реальный IP-адрес своих сайтов и номер порта Xwiki в разделе перенаправления прокси-сервера моего файла nginx.conf, например.

https://SITE-ROOT/xwiki

location /xwiki/ {
            proxy_pass         http://EXTERNAL-REAL-IP:8080/xwiki;
            proxy_redirect     off;
            proxy_set_header   X-Real-IP $remote_addr;
            proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header   X-Forwarded-Host $server_name;
            }

Это работает до тех пор, пока загружается страница Xwiki по умолчанию, но URL-адрес меняется на реальный внешний IP-адрес моего сервера и не использует SSL. Я понимаю, что это связано с тем, что сервер Jetty обслуживает страницу через порт 8080 и вообще пропускает nginx.

Итак, мой фактический вопрос: как я могу заставить службу Xwiki на основе Jetty загружаться в место на моем прокси-сайте Cloudflare с использованием обратного прокси-сервера Nginx, или вы можете помочь мне понять, где я ошибаюсь с этим...

Я подозреваю, что мне нужно установить сертификат SSL, который установлен на моем сервере nginx, на сервере Jetty, чтобы nginx видел сервер Jetty как локальный ресурс, но я очень не уверен в этом...


person Mark Smith    schedule 16.09.2017    source источник


Ответы (1)


Как я упоминал в своем первоначальном вопросе, я ожидал, что перенаправление/прокси xwiki будет работать так же, как работало перенаправление узла...

Я чесал голову и задавался вопросом, почему это не работает, поэтому я поиграл...

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

proxy_set_header   X-Forwarded-Host $server_name;

и заменил его на:

proxy_set_header        X-Forwarded-Proto https;

чтобы Nginx позаботился о SSL-сайте вещей

location /test {
            proxy_pass              EXTERNAL-REAL-IP:8080/;
            proxy_set_header        X-Real-IP $remote_addr;
            proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header        X-Forwarded-Proto https;
            proxy_set_header        Host $http_host;
                        }

Я создал новое «тестовое» местоположение в моем конфигурационном файле nginx, как указано выше, и указал его на внешний IP-адрес и порт 8080, на котором работает Jetty ... и бум, я получил страницу ошибки Jetty на моем https://SITE-NAME/test `url, говорящем что «тестовое» местоположение не было найдено, а это означает, что обратный прокси-сервер nginx работал как нужно...

Хотя мне, возможно, не нужно было бы делать это, если бы я переименовал настройку местоположения в файле nginx.conf, я обнаружил, прочитав документацию Jetty, что я могу изменить URL-адрес, который приложение на основе войны будет запускать на Jetty, переименовав войну файл в каталоге веб-приложений Jetty home.

Я изменил имя файла войны с xwiki на test, перезапустил Jetty и загрузил свой https://SITE-NAME/test в браузере...

Эй-престо, мой сайт теперь обслуживал проксированное приложение Xwiki от Jetty через nginx, используя HTTPS на моем https://SITE-NAME/test URL-адресе...

Я изменил имя файла войны и местоположение в файле nginx, чтобы указать что-то вроде https://SITE-NAME/test, и это работает как шарм!

Затем я изменил местоположение https://EXTERNAL-REAL-IP/test в nginx.conf, чтобы использовать IP-адрес локальной сети nginx, чтобы Nginx использовал локальный прокси, и это все еще работало по мере необходимости - так что, в общем, счастливые дни...

person Mark Smith    schedule 16.09.2017