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

Настройка nginx в качестве прокси-сервера tomcat / uWSGI

Я нахожусь в процессе настройки машины amazon EC2 для разработки java и django. Выбранный нами стек - это nginx в качестве прослушивателя верхнего уровня на порту 80 и передает запросы в соответствующие приложения, через 8080 для tomcat и через .sock для uWSGI.

У меня nginx настроен следующим образом:

   server {
             listen       80;
             server_name  test.myproject.com;
             rewrite ^/(.*)$ /myproject/$1;
             location / {

                         proxy_pass http://127.0.0.1:8080/;
                         proxy_set_header Host $host;
                         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
             }
    }
    server {
              listen       80;
              server_name  test.myotherproject.com;
             rewrite ^/(.*)$ /myotherproject/$1;
             location / {
                         proxy_pass http://127.0.0.1:8080/;
                         proxy_set_header Host $host;
                         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
             }
    }
    server {
             listen       80;
             server_name  web1.myhost.com.br;

             location /static/ {
                     root /home/ubuntu/projects/hellow/;
             }

             location / {
                 uwsgi_pass      unix:/var/run/uwsgi.sock;
                 include         uwsgi_params;
                 uwsgi_param     SCRIPT_NAME '';
             }

    }

Первая «серверная» запись перенаправляет на tomcat webapp .war и работает безупречно. третий - перенаправление на носок uWSGI, и он также работает нормально. вторая проблема. он настроен так же, как и первый, но когда я получаю доступ http://test.myotherproject.com мой браузер выдает мне 404 со следующим сообщением:

    HTTP Status 404 - /myotherproject/myotherproject/user/redirectPermission

    type Status report

    message /myotherproject/myotherproject/user/redirectPermission

    description The requested resource is not available.

    Apache Tomcat/7.0.33

/ user / redirectPermission - это допустимая страница, и это ожидаемое поведение приложения, чтобы перейти на нее при первом доступе для аутентификации пользователя. Проблема заключается в добавлении второй части / myotherproject /, и я не могу понять, почему и где это происходит. Обратите внимание, что URL-адрес, который дает мне 404 выше: http://test.myotherproject.com.br/myotherproject/user/redirectPermission . Также у tomcat нет дополнительной конфигурации в файле server.xml, кроме изменения его порта на 8080, и война ведется в webbapps и его названии myotherproject.war (tomcat7.x / webapps / myotherproject.war). Кто-нибудь знает, как правильно настроить эту настройку? Заранее спасибо, Сальвия

Вы можете попробовать изменить расположение proxy_pass вместо правила перезаписи:

proxy_pass http://127.0.0.1:8080/myotherproject/;

Вторая часть myotherproject, вероятно, добавляется в правила приложения Tomcat.

Можете ли вы провести простой тест?

$ curl -I http://test.myproject.com/myproject
$ curl -I http://test.myotherproject.com/myotherproject

Вывод для второго, если я прав, возвращает 301 (или аналогичный) для / myotherproject / user / redirectPermission, который переписывается как / myotherproject / myotherproject / user / redirectPermission правилами перезаписи:

rewrite ^/(.*)$ /myotherproject/$1;

Если это действительно проблема, решение состоит в том, чтобы оба приложения обслуживались в корневом контексте, но были настроены как виртуальные хосты на Tomcat, чтобы он решал, какое приложение обслуживать на основе заголовка Host (вам может потребоваться передать это заголовок явно из nginx в Tomcat).

Но правильное решение - просто перенаправить весь запрос Tomcat на основе правила местоположения и позволить Tomcat обрабатывать его так, как он хочет.