如何解决反向代理将URL重定向到子域
我正在尝试将帮助URL从example.com/help
重写为help.example.come
。
我尝试了多种配置nginx的方法,但是当我请求example.com/help
时,一会儿出现内容,然后使用help.example.come
url将其重定向到主页。
我在工作中使用了nuxtjs v2.13.3和nginx。这是我的nginx conf:
- nuxtjs服务器块
server {
listen 80;
index index.html;
root /var/www/site/dist/;
server_name example.come;
location / {
proxy_pass http://127.0.0.1:3000;
}
# help redirecting...
location ~ ^/help/(.*)$ {
return 301 $scheme://help.example.come/$1;
}
}
- 子域服务器阻止
server {
listen 80;
server_name help.example.come;
location / {
proxy_pass http://127.0.0.1:3000/help/;
}
location /_nuxt/ {
rewrite /help/(.*) /$1;
proxy_pass http://127.0.0.1:3000/_nuxt/;
}
location ~* \.(jpg|jpeg|gif|png|ico)$ {
rewrite ^/_nuxt(/.*) $1;
root /var/www/site/dist/;
expires 30d;
}
}
解决方法
不确定这是否完全满足您的需求,但
在example.com/help/uri1/uri2
上的传入请求将被重定向到help.example.com/help/uri1/uri2
在将请求代理到后端之前,我们要重写request_uri
rewrite ^/help(.*)$ /_nuxt$1 break;
在这里,我们将/help/
替换为/_nuxt/
。
这是我的测试配置:
server {
listen 80;
server_name example.com;
location /help {
#return 301 http://help.example.com$request_uri;
rewrite ^/help(.*)$ /_nuxt$1 break;
proxy_pass http://127.0.0.1:3000/;
}
}
server {
listen 80;
server_name help.example.com
location / {
rewrite ^/help(.*)$ /_nuxt$1 break;
proxy_pass http://127.0.0.1:3000/;
}
}
server {
#Fake Backend
listen 3000;
location /_nuxt {
add_header "Content-Type" "text/html";
return 200 "$request_uri \n";
}
}
我的实验室要求
8080 = example.com
8081 = help.example.com
8082 = fake bakend (:*3000)
root@deploy-VirtualBox:/etc/nginx/conf.d#curl -vL http://192.168.137.129:8080/help/uri1/uri2;
* Trying 192.168.137.129...
* TCP_NODELAY set
* Connected to 192.168.137.129 (192.168.137.129) port 8080 (#0)
> GET /help/uri1/uri2 HTTP/1.1
> Host: 192.168.137.129:8080
> User-Agent: curl/7.58.0
> Accept: */*
>
< HTTP/1.1 301 Moved Permanently
< Server: nginx/1.19.3
< Date: Wed,30 Sep 2020 17:12:59 GMT
< Content-Type: text/html
< Content-Length: 169
< Connection: keep-alive
< Location: http://192.168.137.129:8081/help/uri1/uri2
<
* Ignoring the response-body
* Connection #0 to host 192.168.137.129 left intact
* Issue another request to this URL: 'http://192.168.137.129:8081/help/uri1/uri2'
* Found bundle for host 192.168.137.129: 0x55623c402020 [can pipeline]
* Trying 192.168.137.129...
* TCP_NODELAY set
* Connected to 192.168.137.129 (192.168.137.129) port 8081 (#1)
> GET /help/uri1/uri2 HTTP/1.1
> Host: 192.168.137.129:8081
> User-Agent: curl/7.58.0
> Accept: */*
>
< HTTP/1.1 200 OK
< Server: nginx/1.19.3
< Date: Wed,30 Sep 2020 17:12:59 GMT
< Content-Type: text/html
< Content-Length: 18
< Connection: keep-alive
<
/_nuxt/uri1/uri2
* Connection #1 to host 192.168.137.129 left intact
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。