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

Настройка nginx для использования с Tomcat и SSL

Я погуглил и посмотрел на различные образцы конфигураций SSL, и кажется, что все настроено правильно, но есть две проблемы:

  1. Когда я загружаю https://mysite.com, замок, который должен появиться в правом верхнем углу окна браузера, не появляется.
  2. Приложение Java за кулисами использует httpUtil.GetRequestURL () для получения текущего запроса, и это http://mysite.com.

Я попытался установить заголовок Host на $ host вместо $ http_host, и я попытался установить proxy_redirect для установки URL-адреса на https, но ни один из них не дал никакого эффекта.

Моя конфигурация SSL ниже. Кто-нибудь может сказать мне, что я сделал не так?

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

Прошло больше шести месяцев, но я попробую. Я думаю, вам не хватает заголовка X-Forwarded-Proto. Соответствующая конфигурация виртуального хоста на 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;
        }

В некоторых случаях, как, например, в JIRA выше, вам нужно сообщить Tomcat, что он находится за прокси:

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

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

Что касается троенгела, зачем мне "Nginx + Tomcat"? Ну, nginx намного быстрее и почти ничего не требует как памяти, так и процессора. Таким образом, можно потратить больше ресурсов, например, на Tomcat. : /

Наконец, я бы больше не называл Apache-AJP13-Tomcat правильной интеграцией. После включения Tomcat APR Listener:

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

и sendfile (с родной библиотека), все дело просто летает. Затем вы просто отправляете статический контент прямо из nginx, и у вас все еще достаточно мощности для запуска всеми любимых сайтов php путем проксирования на php-fpm.

Ну, это только из моего опыта, мммммм.

У меня на работе похожая конфигурация; nginx завершает работу SSL и передает необработанный HTTP обратно в tomcat. Наше приложение использует несколько доменных имен.

Мы обнаружили, что достаточно добавить строки в server.xml:

    scheme="https"
    proxyPort="443"

proxyName не требовалось, как и никаких других изменений ни в tomcat, ни в nginx.