Conecte-se a um servidor Tomcat do nginx como proxy reverso

2

Eu tenho um servidor Tomcat que atende a um aplicativo da Web e tenho um servidor Nginx em execução na frente dele como um proxy reverso. Como resposta à minha pergunta anterior ( servidor Tomcat por trás do proxy reverso nginx - como bloquear o acesso direto ao servidor? ), Eu fui sugerido para o firewall da instância do Tomcat, mas com base em minhas descobertas em fóruns diferentes, limitar o Tomcat a ouvir o localhost parecia ser o caminho a percorrer. Para evitar que o Tomcat ouça outros IPs, adicionei "address = 127.0.0.1" à configuração do conector. Todo o bloco de conectores é assim -

<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"/> 

No servidor Nginx, tenho estas linhas para a configuração do servidor.

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;
}
}

Agora, se eu tentar usar o FQDN para acessar o aplicativo da web, o Chrome reportará ERR_CONNECTION_REFUSED. Minha configuração Nginx parece ser o culpado com base no que entendi. Como isso pode ser corrigido?

    
por Chethan S. 20.04.2016 / 11:59

1 resposta

2

Para o propósito da pergunta, assumirei que os seguintes IPs

Nginx 192.168.0.1
Tomcat 192.168.0.2

Configure o servidor do tomcat

Altere a seguinte linha address="127.0.0.1" para address="192.168.0.2" - Isso permitirá que o Tomcat ouça no ip local, em vez do endereço de loopback.

Em seguida, queremos configurar os IPtables. Eu usei o gerador aqui .

As regras abaixo são "seguras" elas não bloquearão o acesso remoto (eu permiti o SSH na porta 22, assumindo que a porta ssh é padrão), mas elas não são tão restritivas quanto talvez devessem / poderiam estar. Então, por favor, tire um minuto para examiná-los. Também removeria quaisquer regras atuais

#!/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

Configurar o servidor Nginx

Você precisa editar a configuração do seu servidor um pouco. Nós agora procuramos no servidor Tomcat em seu IP local.

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;
        }
}

Você pode fazer proxy para um FQDN, mas precisa configurar um separado para aquele que está apontando para o servidor Nginx. Por exemplo, se o FQDN acima for myapp.example.com , você configuraria outro FQDN, como tomcat.example.com , e teria essa resolução em 192.168.0.2 , e então poderia substituir 192.168.0.2 na configuração nginx acima por tomcat.example.com

    
por 20.04.2016 / 13:48