У меня есть nginx в качестве обратного прокси-сервера, настроенного так:
server {
listen 80;
server_name mydomain.com anotherdomain.es 20.18.4.140;
location ^~ /service/ {
proxy_pass http://20.18.4.146/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
location ^~ /vm2/ {
proxy_pass http://20.18.4.146/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
location ^~ /vm3/ {
proxy_pass http://20.18.4.142:6001/;
#proxy_set_header Host $host;
#proxy_set_header X-Real-IP $remote_addr;
#proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#proxy_set_header X-Forwarded-Proto $scheme;
} location / {
proxy_pass http://20.18.4.148/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
} }
server {
listen 443 ssl;
server_name mydomain.com anotherdomain.es 20.18.4.140;
fastcgi_param HTTPS on;
include /etc/nginx/include/ssl;
location ^~ /service/ {
proxy_pass https://20.18.4.146/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
location ^~ /vm2/ {
proxy_pass https://20.18.4.146/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
location ^~ /vm3/ {
proxy_pass https://20.18.4.142:6000/;
#proxy_set_header Host $host;
#proxy_set_header X-Real-IP $remote_addr;
#proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#proxy_set_header X-Forwarded-Proto $scheme;
}
location / {
proxy_pass https://20.18.4.148/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
Теперь я правильно обращаюсь к нему следующим образом:
mydomain.com / service / ... anotherdomain.es/service/...
mydomain.com / vm2 / ... anotherdomain.es/vm2/...
mydomain.com / vm3 / ... anotherdomain.es/vm3/...
mydomain.com / ... anotherdomain.es/...
Перенаправляет весь трафик c из местоположения на соответствующий сервер. Остальная часть URL (включая параметры) не вызывает проблем c и имеет верхний и нижний регистр.
Но мне нужно, чтобы места не учитывали регистр. И чтобы иметь к нему доступ (или любую другую комбинацию):
mydomain.com / Service / ... anotherdomain.es/SERVICE/...
mydomain .com / VM2 / ... anotherdomain.es/Vm2/...
Я не хочу повторять местоположения или повторять конфигурацию каждого из них. Я хотел бы сделать это лучше и эффективнее.
Я пробовал с регулярными выражениями, но проверка синтаксиса дает мне ошибки, и это не работает. Например, этот:
~* ^/(vm2|Vm2|VM2)/$
~* ^/vm2/
~* /(<vm2>/g)
~* /app1/(.*)
...
Ошибка:
nginx: [emerg] "proxy_pass" не может иметь часть URI в местоположении, заданном регулярным выражением, или внутри именованного местоположения или внутри оператора if, или внутри блока limit_except в / etc / nginx / sites-enabled / my-sites: 4 nginx: файл конфигурации /etc/nginx/nginx.conf не пройден
И это также может быть так: mydomain.com/vm2/service/15 (это регулярные выражения, это будет 2)
Я посмотрел и много пробовал, но я не не вижу ничего, что работает для меня. Любые идеи? Спасибо.