Попытка разрешить переопределение URL-адресов работать вместе с переадресацией портов, но это, похоже, не работает.
Мой сервер приложений работает на :8080
порт в то время как nginx
работает по умолчанию 80
один. Поэтому я вынужден не только переписывать URL-адреса, но и перенаправлять запрос на другой порт.
Собственно, единственное, что я пытаюсь сделать, это запросить существующий ресурс http://localhost:8080/#/cat/tom
по его ярлыку http://localhost/tom
без перенаправления.
Вот что я сделал на основе nginx
док и другие вопросы:
server {
listen 80;
server_name localhost;
root /;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
rewrite ^/([a-z]+)$ /#/cat/$1 break;
proxy_pass http://localhost:8080;
proxy_redirect off;
}
...
}
Пробовали другие конфигурации, но ни одна из них не работает. Когда я получаю доступ к http://localhost/tom
это говорит 404 not found
в то время http://localhost:8080/#/cat/tom
работает как положено.
В журналах нет упоминания об ошибках.
Как заставить эту работу работать как положено?
Переписывание nginx работает только с частью пути URL. Это не работает с частью запроса, которая разделена ?
и не работает на части, разделенной #
, который является фрагментом.
Собственно, при входе в ваш http://localhost:8080/#/cat/tom
URL в ваш браузер, ваш браузер отправляет запрос на получение http://localhost:8080/
, и ваш браузер обрабатывает часть после #
сам по себе.
Итак, вам нужно выяснить, как именно ваше прикладное программное обеспечение работает с этими частями фрагмента, и на основе этого создать конфигурацию.
Проблема в том, что #/cat/tom
- это инструкция для клиентского приложения, а не для серверного. Это означает, что его нужно отправить клиенту (через перенаправление).
Например:
location = /tom {
return 302 /#/cat/tom;
}
location / {
proxy_pass http://localhost:8080;
...
}
Вы упоминаете в своем вопросе, что пытаетесь сделать это без перенаправления, но, к сожалению, если вы посмотрите на структуру URL-адреса, вы заметите, что все, что находится после #
не отправляется на сервер. Видеть этот документ для большего.