Я нахожусь в процессе настройки машины 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 обрабатывать его так, как он хочет.