Configurando o nginx para uso com o Tomcat e o SSL

6

Eu pesquisei e observei várias configurações SSL de amostra e parece que as coisas estão corretas, mas há dois problemas:

  1. Quando carrego o link , o bloqueio que deve aparecer no canto superior direito da janela do navegador não é exibido.
  2. O aplicativo Java nos bastidores usa o httpUtil.GetRequestURL () para obter a solicitação atual e é o link .

Eu tentei definir o cabeçalho do Host como $ host em vez de $ http_host, e tentei definir proxy_redirect para definir o URL como https, mas nenhum deles teve efeito algum.

Minha configuração SSL está abaixo. Alguém pode me dizer o que eu fiz de errado?

server {
    listen       443;
    server_name  dev.mysite.com;

    access_log  /var/log/nginx/dev_mysite_access.log;
    error_log  /var/log/nginx/dev_mysite_error.log;

    ssl on;
    ssl_certificate /export/nginx/certs/mysite.com.crt;
    ssl_certificate_key /export/nginx/certs/mysite.com.key;

    location / {
        # give site more time to respond
        proxy_read_timeout 120;

        # needed to forward user's IP address
        proxy_set_header  X-Real-IP  $remote_addr;

        # needed for HTTPS
        proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_redirect off;
        proxy_max_temp_file_size 0;

        proxy_pass http://localhost:8081;
    }
}
    
por Janine Ohmer 20.08.2010 / 00:06

2 respostas

6

Já faz mais de seis meses, mas vou tentar. Eu acho que você está perdendo o cabeçalho X-Forwarded-Proto. Configuração de host virtual relevante no nginx:

        server jira.site.com;
        ...
        location /jira {
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-Proto https;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass http://127.0.0.1:8080/jira;
        }

Em alguns casos, como o JIRA acima, por exemplo, você precisa dizer ao Tomcat que está por trás do proxy:

   <Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           URIEncoding="UTF-8"
           redirectPort="8443"
           scheme="https"
           proxyName="jira.site.com"
           proxyPort="443"/>

Dessa forma, você pode acabar com várias portas para cada aplicativo, mas funciona bem.

Quanto a troyengel's, por que me incomodaria com "Nginx + Tomcat"? Bem, o nginx é muito mais rápido e não leva quase nada a memória e o cpu-wise. Dessa forma, há mais recursos para desperdiçar, no Tomcat, por exemplo. : /

Finalmente, eu não chamaria o Apache-AJP13-Tomcat de uma integração adequada, não mais. Depois de ativar o Ouvinte APR do Tomcat:

<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />

e sendfile (com a biblioteca tcnative ), a coisa toda simplesmente voa. Então você apenas serve conteúdo estático diretamente do nginx e ainda tem energia suficiente para executar os sites php favoritos de todos, fazendo proxy para php-fpm.

Bem, isso é apenas da minha experiência, apesar de tudo.

    
por 18.02.2011 / 21:43
4

Temos uma configuração semelhante no meu trabalho; O nginx termina o SSL e passa o HTTP bruto de volta ao tomcat. Nosso aplicativo usa vários nomes de domínio.

Descobrimos que é suficiente adicionar as linhas a server.xml :

    scheme="https"
    proxyPort="443"

proxyName não foi requerido, nem outras alterações, nem ao tomcat nem ao nginx.

    
por 18.07.2013 / 22:49