У меня nginx работает в качестве основного веб-сервера, но у меня также есть сервер торнадо, работающий по https на 127.0.0.1:8888
(та же машина, что и сервер nginx). Я хочу перенаправить трафик на мой сервер торнадо, когда пользователь переходит на http://myserver.com/tornadoapp. У меня это пока есть ...
# tornado server
upstream tornadoserver {
server 127.0.0.1:8888;
}
server {
listen 80 default_server;
root /var/www;
location /tornadoapp {
proxy_pass https://tornadoserver;
}
}
Он действительно пересылает запрос моему серверному приложению торнадо, но торнадо генерирует эту ошибку ...
WARNING:tornado.access:404 GET /tornadoapp (127.0.0.1) 1.75ms
Итак, перенаправление будет на торнадо, но я получаю сообщение об ошибке, потому что торнадо не имеет обработчика для /tornadoapp
. Имеются обработчики для /
, /login
, и /user
и т. д. я надеялся использовать http://myserver.com/tornadoapp в качестве «псевдонима» или маски, чтобы URL-адрес выглядел безупречно для конечного пользователя (без номеров портов), таким образом ...
# When this is typed
http://myserver.com/tornadoapp/login
# they are directed here...
https://localhost:8888/login
без URL-адреса, показывающего номер порта. Есть ли способ сделать это? Я просмотрел несколько примеров в Интернете, но большинство, похоже, связано с перенаправлением https на другие домены или с использованием /
как расположение в серверном блоке. Ни один из них, похоже, не решает именно эту проблему. Если это невозможно или я ошибаюсь, дайте мне знать. Я новичок в nginx, поэтому любая помощь приветствуется. Спасибо!
Добавить трейлинг /
на ваш proxy_pass
строка, чтобы она выглядела так:
proxy_pass https://tornadoserver/;
Это должно привести к тому, что nginx удалит часть адреса URI (в вашем случае /tornadoapp
) перед тем, как передать его торнадо.
Также смотрите документацию: http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_pass