Я новичок в nginx и том, как он обрабатывает locatoins, и надеялся получить помощь по проблеме, с которой я столкнулся:
На том же сервере у меня есть веб-сервер Apache и сервер веб-сокетов. Apache работает на порту 8080, а сервер websocket работает на 9090. Я хотел бы поставить прокси nginx впереди, чтобы трафик http / https передавался через прокси на apache, а трафик ws / wss проксировался на сервер websocket.
У меня такая конфигурация:
location /ws* {
proxy_pass ws://127.0.0.1:9090;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
proxy_pass http://127.0.0.1:8080;
}
Это работает нормально, но проблема, с которой я сталкиваюсь, заключается в том, что все запросы ws * также перенаправляются на сервер apache, в то время как я хочу, чтобы они перенаправлялись только на сервер ws. Я читал, что nginx берет только первое совпадающее местоположение, но в моем случае это кажется неправильным.
Итак, вопрос в том, как я могу проксировать http (s) трафик ТОЛЬКО на apache и ws (s) трафик ТОЛЬКО на сервер веб-сокетов?
Ваш синтаксис местоположения не похож на то, что вы пытаетесь сделать.
Если вы пытаетесь выполнить регулярное выражение с URL-адресом местоположения, правильный синтаксис:
location ~ /ws.* {
Если вы пытаетесь делать все в каталоге ws, у вас должно быть:
location /ws/ {
Вы можете просмотреть документацию для получения дополнительной информации о местоположении. http://nginx.org/en/docs/http/ngx_http_core_module.html#location