我想要实现的结果是:
访问 api.example.com/hello/world
就相当于访问 www.example.com/api/hellp/world
这样。就是 url 看起来好看一点。
不知道在 nginx 中的配置应该需要怎么写?
重定向
@fruit-memory URL 不能改变啊。微信那边会提示不在安全域名内。
这不就是反向代理么… nginx reverse proxy
那就试试反向代理
@thonatos 但是我用了 proxy_pass 后,会无限重定向到 /api/api/api/api/ 下。
@fruit-memory 但是我用了 proxy_pass 后,会无限重定向到 /api/api/api/api/ 下。
如果使用了 proxy_pass 后就会一直加 /api 并重定向。 这是 nginx 的配置:
server {
listen 80;
listen 443 ssl;
server_name api.example.com;
ssl_certificate fullchain.pem;
ssl_certificate_key privkey.pem;
access_log /var/log/nginx/api/access.log;
error_log /var/log/nginx/api/error.log;
location / {
proxy_pass http://www.example.com/api/;
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 Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_redirect off;
}
}
server {
listen 80;
server_name api.example.com;
rewrite ^/(.*) http://www.example.com/api/$1 permanent;
}
然后再写一个配置处理www.example.com
最后proxy_pass到某个端口
@fruit-memory /api/ 就是个路由。
@JZLeung 不对吗?按你给的要求就是把路由转到api下面来吗?
nginx配置url重写即可
@JZLeung
nginx 通过 host 来 match 到 server 的。
因此,你的配置需求去掉 proxy_set_header Host $host;
@JZLeung 你这个配置。。。。看看下面给你的写法吧
这个超级简单的,反向代理把api加上即可
From Noder
@JZLeung (/* and not /api/*)=> /api/*
@Gitforxuyang 重写好像不行。会无限重定向 /api/api/api/…
@hanyuzhou2006 请问下这个要具体怎么写?
@thonatos 他给的直接 rewrite 我试过了,很怪异地无限重定向了。
给 www.example.com再配置一个service啊. 你这个已经是不同的域了,感觉不适合用rewrite吧
@redky 去掉后,访问接口就这样。
@fruit-memory 你的方法可以,但是 url 会改变,微信那边好像会报错。
你这是要浏览器地址栏显示改变后的URL,只能这么做吧?微信可能是以为你改变后的URL不安全
url 重写啊!对外部是透明的 From Noder
@fruit-memory 要的是浏览器的地址栏不显示改变后的 url 才可以。