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

Подключитесь к серверу Tomcat из nginx в качестве обратного прокси

У меня есть сервер Tomcat, обслуживающий веб-приложение, и у меня есть сервер Nginx, работающий перед ним в качестве обратного прокси. В ответ на мой предыдущий вопрос (Сервер Tomcat за обратным прокси-сервером nginx - как заблокировать прямой доступ к серверу?), Мне предложили установить брандмауэр для экземпляра Tomcat, но, судя по результатам, полученным на разных форумах, ограничение Tomcat прослушиванием localhost казалось правильным решением. Чтобы Tomcat не слушал другие IP-адреса, я добавил в конфигурацию коннектора «адрес = 127.0.0.1». Вся соединительная колодка такая -

<Connector port="8080" 
address="127.0.0.1" 
maxThreads="150" 
minSpareThreads="25" 
connectionTimeout="20000" 
enableLookups="false" 
maxHttpHeaderSize="8192" 
protocol="HTTP/1.1" 
useBodyEncodingForURI="true" 
redirectPort="8443" 
acceptCount="100" 
disableUploadTimeout="true"
proxyName=<FQDN> 
proxyPort="80"/> 

На сервере Nginx у меня есть эти строки для конфигурации сервера.

server {
        listen  80 default_server;
        listen  [::]:80 default_server ipv6only=on;

        server_name <FQDN>;
        location / {
        proxy_pass <FQDN>;
        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;
}
}

Теперь, если я попытаюсь использовать полное доменное имя для доступа к веб-приложению, Chrome сообщает об ошибке ERR_CONNECTION_REFUSED. Моя конфигурация Nginx кажется виноватой, исходя из того, что я понял. Как это исправить?

В целях вопроса я предполагаю, что следующие IP-адреса

Nginx 192.168.0.1
Кот 192.168.0.2

Настроить сервер tomcat

Измените следующую строку address="127.0.0.1" к address="192.168.0.2" - Это укажет Tomcat прослушивать локальный IP-адрес, а не адрес обратной связи.

Затем мы хотим настроить IPtables. Я использовал генератор Вот.

Приведенные ниже правила являются «безопасными», они не заблокируют вас для удаленного доступа (я разрешил SSH на 22-м порту, предполагая, что ваш ssh-порт установлен по умолчанию), но они не столь строгие, как они, возможно, должны / могли бы быть. Пожалуйста, найдите минутку, чтобы посмотреть на них. Это также удалит все текущие правила

#!/bin/sh

# iptables script generated 2016-04-20
# http://www.mista.nu/iptables

IPT="/sbin/iptables"

# Flush old rules, old custom tables
$IPT --flush
$IPT --delete-chain

# Set default policies for all three default chains
$IPT -P INPUT DROP
$IPT -P FORWARD DROP
$IPT -P OUTPUT ACCEPT

# Enable free use of loopback interfaces
$IPT -A INPUT -i lo -j ACCEPT
$IPT -A OUTPUT -o lo -j ACCEPT

# All TCP sessions should begin with SYN
$IPT -A INPUT -p tcp ! --syn -m state --state NEW -s 0.0.0.0/0 -j DROP

# Accept inbound TCP packets
$IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A INPUT -p tcp --dport 22 -m state --state NEW -s 0.0.0.0/0 -j ACCEPT # Accepts SSH from everywhere
$IPT -A INPUT -p tcp --dport 8080 -m state --state NEW -s 192.168.0.1/32 -j ACCEPT # Accepts connection to port 8080 only from the Nginx Server

# Accept inbound ICMP messages
$IPT -A INPUT -p ICMP --icmp-type 8 -s 0.0.0.0/0 -j ACCEPT
$IPT -A INPUT -p ICMP --icmp-type 11 -s 0.0.0.0/0 -j ACCEPT

Настроить сервер Nginx

Вам нужно немного отредактировать конфигурацию вашего сервера. Теперь мы проксируем сервер Tomcat на его локальный IP-адрес.

server {
        listen  80 default_server;
        listen  [::]:80 default_server ipv6only=on;
        server_name <FQDN>;

location / {
        proxy_pass http://192.168.0.2:8080;
        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;
        }
}

Вы можете использовать прокси для полного доменного имени, но вам нужно настроить отдельное имя, отличное от того, которое указывает на сервер Nginx. Например, если указанное выше полное доменное имя было myapp.example.com вы должны настроить другое полное доменное имя, например tomcat.example.com и имейте это решение 192.168.0.2 тогда вы могли бы заменить 192.168.0.2 в конфигурации nginx выше с tomcat.example.com