Поддомен nginx и переадресация домена w proxy pass
Мне нужны эти два типа перезаписи:
subdomain.domain.com => domain.com/website/subdomain
otherdomain.com => domain.com/userdomain/otherdomain.com
Моя проблема в том, что я хочу, чтобы пользователь видел subdomain.domain.com
и otherdomain.com
, а не перенаправленную версию. Моя текущая перезапись в nginx работает, но URL-адрес пользователя показывает переписывание, и я хочу, чтобы это было прозрачно для пользователя, любые идеи?:
upstream domain_server { server localhost:8000 fail_timeout=0; }
server {
listen 80;
root /var/www/domain.com;
server_name domain.com ~^(?<subdomain>.*)\.domain\.com$ ~^(?<otherdomain>.*)$;
if ( $subdomain ) {
rewrite ^ http://domain.com/website/$subdomain break;
}
if ( $otherdomain ) {
rewrite ^ http://domain.com/userdomain/$otherdomain break;
}
location / {
proxy_redirect off;
proxy_buffering off;
proxy_set_header Host $http_host;
proxy_set_header X-forwarded-for $proxy_add_x_forwarded_for;
if (!-f $request_filename) {
proxy_pass http://domain_server;
break;
}
}
}
Ответы
Ответ 1
С nginx вам не нужно переписывать вообще.
upstream domain_server { server localhost:8000 fail_timeout=0; }
proxy_set_header Host domain.com;
proxy_set_header X-forwarded-for $proxy_add_x_forwarded_for;
server {
listen 80 default_server;
location / {
proxy_pass http://domain_server/userdomain/$http_host;
}
}
server {
listen 80;
server_name domain.com;
root /var/www/domain.com;
location / {
try_files $uri @backend;
}
location @backend {
proxy_pass http://domain_server;
}
}
server {
listen 80;
server_name ~^(?<subdomain>.+)\.domain\.com$;
location / {
proxy_pass http://domain_server/website/$subdomain$request_uri;
}
}