这是类别中的一个问题: “我什至不确定我想要的东西是否可行”。
所以我在LXC容器中有一个应用程序。我使用nginx代理将http://domain.name.com/service/client-name/
转发到XXX.XXX.XXX.XXXX:5000
(在主机上运行的LXC容器)。
这是我的/etc/nginx/sites-enabled/domain.name.com
server {
listen 80;
listen [::]:80;
server_name domain.name.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name domain.name.com;
# Logs
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
# SSL Cert
ssl_certificate /var/www/ssl/name.com_combined.crt;
ssl_certificate_key /var/www/ssl/name.com.key;
auth_basic "Contact company representative for auth";
auth_basic_user_file /etc/nginx/.htpasswd;
# Proxy
location /service/client-name/ {
proxy_pass http://XXX.XXX.XXX.XXXX:5000/;
proxy_redirect off;
proxy_set_header Host 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;
}
}
它正在工作。 有办法 网站开通了。
但是我的服务使用了大量对/
的引用。例如,api/info/
则请求/api/info
。因此我的代理正在工作,正在加载应用程序的主页,但应用程序无法访问以/
开头的任何路径。例如。它应该请求http://domain.name.com/service/client-name/api/
,但请求http://domain.name.com/api/
,因为代码中的路径是绝对路径(指向/
)。
是否可以通过任何方式配置nginx以/
替换所有以/service/client-name/
开头的路径,或告诉浏览器根路径不是/
而是/service/client-name/
(也许提供一些标头,但我找不到类似的东西)?
我想要更多的服务,例如:
http://domain.name.com/service/client-name/
http://domain.name.com/service/another-client/
http://domain.name.com/service/and-one-more/
...所以我不能简单地将http://domain.name.com/api/
重定向到http://domain.name.com/service/client-name/api
,因为所有这些实例都会在http://domain.name.com/api/
中寻找API。
我尽可能地用Google搜索,但是找不到解决方案。我相信这是一个有趣且颇受欢迎的案例,很难相信还没有人找到解决方案。
了解应用程序是用Node.js编写的,这可能会很有用。当然,我可以重构应用程序,但是我已经在不同版本中部署了许多实例,迁移将需要一些时间。