Я хочу настроить прокси Nginx для сервера Tomcat с моим доменным именем, например
example.com/demo/sample
example.com/demo/manager
example.com/demo/other_apps
...
Вот мой Nginx server block
конфигурация
server {
listen 80;
server_name example.com;
location /demo/ {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_pass http://IP_ADD_TOMCAT_SERVER:8080/;
}
location ~ /\.ht {
deny all;
}
## Only allow these request methods ##
if ($request_method !~ ^(GET|HEAD|POST)$ ) {
return 444;
}
## Do not accept DELETE, SEARCH and other methods ##
}
Здесь я столкнулся с двумя проблемами:
Первая проблема:
если TOM_CAT_INSTALL_DIR/webapps/sample/
содержит статическую страницу hello.jsp
, он работает с URL:
example.com/demo/app1/
но не работает с URL:
example.com/demo/app1
Почему я должен добавить косую черту в конце /
в конце URL-адреса, чтобы прокси nginx работал?
Вторая проблема:
Если TOM_CAT_INSTALL_DIR/webapps/manager
содержит index.jsp
файл, который является динамической веб-страницей, он не работает с URL
example.com/demo/manager/
URL становится
example.com/manager / ....
Далее следует длинный список параметров.
если я добавлю вручную /demo/
в URL-адрес веб-браузера, он снова работает.
Как сделать так, чтобы прокси nginx работал с подкаталогом /demo/
?
Обновить: Я обнаружил, что отсутствующая проблема перезаписи для подкаталога Tomcat Manager заключается в том, что в файле index.jsp request.getContextPath()
НЕ будет автоматически добавлять / demo / subdirecotry в URL-адрес. Похоже, нам нужно вручную изменить код файла .jsp.
Если вы не знаете, как изменить код jsp, как я, вы можете обойти это, используя приведенный ниже код в Nginx.
# Must add the trailing '/' for both location and proxy_pass
location /demo/ {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_pass http://TOM_CAT_SERVER_IP_ADDR:8080/;
}
# ONLY work for manager apps, for other apps,
# You must add more rewrite rules like the below
location /manager/ {
rewrite ^/(.*)$ /demo/$1 last;
}
Я думаю ты что-то добавил /
дополнительно в настройках конфигурации ...
Посмотрите на эту строку:
proxy_pass http://IP_ADD_TOMCAT_SERVER:8080/;
вам нужно удалить завершающую косую черту, и она должна работать нормально.
как это:
proxy_pass http://IP_ADD_TOMCAT_SERVER:8080;
попробуйте и посмотрите, все ли пойдет хорошо !!
Обновление # 1 Я только что заметил, что у вас есть очередная ошибка "та же опечатка" в вашем location /
удалите вторую косую черту, и все должно работать нормально !!
как это : location /demo {
вместо этого location /demo/ {
Обновление №1: вы можете проверить свой URL с помощью этого
$ curl -I http://yoururl.com
и посмотрите, какой результат вам даст. таким образом вы узнаете, работает он или нет.
Обновление № 3:
ваша настройка для работы с любыми .jsp
расширение должно иметь этот код в вашем vhost:
location ~ \.jsp$ {
proxy_pass http://localhost:8080;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
}
также получить /demo
для работы вам нужно добавить код перезаписи ниже server_name example.com
rewrite ^/(.*)$ /demo/$1;
Мое дело http: // localhost: 8080 / демонстрация первая страница работает, но изображение и другие компоненты не поступают с сервера Поэтому я добавляю следующее сопоставление
server {
listen 80;
listen [::]:80;
server_name www.example.org example.org;
#remove /demo if it come to URI otherwise it add two time for call proxy
rewrite ^/demo(.*)$ $1;
rewrite ^/(.*)$ /demo/$1;
location / {
proxy_pass http://localhost:8080;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
}
}