我想将我的 HTTP webapi 隐藏在 Apache 代理后面。我当前的配置是:
<VirtualHost *:8180>
SSLEngine on
SSLCertificateFile /tools/Apache24/conf/ssl/---.crt
SSLCertificateKeyFile /tools/Apache24/conf/ssl/---.key
ServerName some.server.some.where
DocumentRoot "/applications/------/dist"
DirectoryIndex index.html
RewriteEngine On
RewriteRule /api/(.*) http://localhost:8182/$1 [P,L]
ProxyPass /api/ http://localhost:8182/
ProxyPassReverse /api/ http://localhost:8182/
<Directory /applications/------/dist>
Require all granted
</Directory>
</VirtualHost>
有了这个,我可以通过 /api 访问我的 api,但它只适用于 GET 请求?我该怎么做才能允许 POST、PUT 和 DELETE?BR,Daniel
答案1
首先,您有两个指令,它们或多或少应该做同样的事情,使用
RewriteEngine On
RewriteRule /api/(.*) http://localhost:8182/$1 [P,L]
或者
ProxyPass /api/ http://localhost:8182/
ProxyPassReverse /api/ http://localhost:8182/
但不能同时使用两者。(我个人更喜欢 ProxyPass 节)。
除非另有配置,否则应反向代理所有方法,并且当 GET 有效时,POST 和其他方法也应该有效。(除非你在其他地方禁止它们。)
但是在很多情况下,/api/
在反向代理上使用的 URL 路径但在/
的根目录中安装实际 APIhttp://localhost:8182/
可能会以有趣的方式失败。