[英]Apache, Issue routing a certain endpoint to a different port using Location
我正在尝试将任何以 /api/ 开头的链接路由到我服务器上的端口 3002,但它们总是路由到 3008。例如https://example.com/api/customers应该被代理/路由到 localhost:3002
<VirtualHost *:443>
ServerAdmin (redacted)
ServerName (redacted)
ServerAlias (redacted)
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/(redacted)/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/(redacted)/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/(redacted)/chain.pem
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
<Location "/api\/(.*)/">
ProxyPass http://localhost:3002/
ProxyPassReverse http://localhost:3002/
</Location>
<Location "/">
ProxyPass http://localhost:3008/
ProxyPassReverse http://localhost:3008/
</Location>
</VirtualHost>
使用此配置转到 domain.com 可以工作并显示我的网站,但 domain.com/api/customers 从端口 3008 上的 webapp 返回错误,因此它没有正确路由(它应该 go 到 3002)。
端口 3008 和 3002 上的应用程序运行正常,所以这不是问题所在。 我试过将 domain/ first 和 domain/api 最后放在配置文件中,但这似乎没有解决它。 并启用配置文件
我也尝试了不同的正则表达式来匹配 api 端点,但这个应该可以工作
Apache 正在侦听端口 443
这些 mod 已启用,为此需要: proxy_module(共享) proxy_http_module(共享) proxy_wstunnel_module(共享)
如果您需要任何额外信息,请告诉我
如下修改您的配置并尝试一下。
如果不起作用,请发布访问日志和 curl 响应。
curl -ILKv https://domain.name/api/anything
curl -ILKv https://domain.name/api
https://httpd.apache.org/docs/2.4/mod/mod_proxy.html
ProxyRequests Off
<Proxy *>
Order deny,allow
Deny from all
Allow from 127.0.0.1
</Proxy>
ProxyPass /api http://localhost:3002
ProxyPassReverse /api http://localhost:3002
我最终像这样解决了它:
RewriteEngine on
RewriteRule "/api\/(.*)" "http://localhost:3002/api/$1" [P]
<Location "/">
ProxyPass http://localhost:3008/
ProxyPassReverse http://localhost:3008/
</Location>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.