同一个服务器需要部署多个软件,但是 80 端口只能给一个,这时候我们需要使用反向代理。Nginx 的反向代理相对简单,Apache 也仅需简单配置即可。
这里特别介绍 RewriteRule 配置中的 [P] 标记,这是 2.4 版的新特性,所以在网络上很多的老旧资料中是找不着的。官方 Wiki 介绍(英文):http://httpd.apache.org/docs/2.4/rewrite/flags.html#flag_p
以本服务器为例,下面是 ngrok 的配置文件:
<VirtualHost *:80> ServerName main.ngrok.skitisu.com ServerAlias *.ngrok.skitisu.com RewriteEngine On RewriteRule ^/(.*) http://%{HTTP_HOST}:8000/$1 [P] <Proxy *> Order deny,allow Allow from all </Proxy> ProxyPass / http://localhost:8000/ ProxyPassReverse / http://localhost:8000/ </VirtualHost>
对于 ASP.NET WEB API 程序,我需要将/跳转到 index.html 但保持网址不变,配置如下:
<VirtualHost *:80> ServerName numgame.skitisu.com RewriteEngine On # 判断语句,如果请求的参数为/ RewriteCond %{REQUEST_URI} =/ # 那么反代到后端软件的/index.html RewriteRule / http://localhost:5000/index.html [P] # 否则正常传递请求参数反代 RewriteRule ^/(.*) http://localhost:5000/$1 [P] <Proxy *> Order deny,allow Allow from all </Proxy> ProxyPass / http://localhost:5000/ ProxyPassReverse / http://localhost:5000/ </VirtualHost>
Comments | 5 条评论
博主 wamdy.com
SkiTiSu 你好,我需要自建 ngrok,配置在 99 端口,现在用 apache2.4.18 反向代理 ngrok
ServerAdmin admin@wamdy.com
ServerName ww.tunnel.wamdy.com
ServerAlias *.tunnel.wamdy.com
ProxyPreserveHost On
ProxyRequests Off
RewriteEngine On
RewriteRule ^/(.*) https://%{HTTP_HOST}:99/$1 [P]
Order deny,allow
Allow from all
ProxyPass / https://localhost:99/
ProxyPassReverse / https://localhost:99/
可以转发请求到 ngrok, 但 ngrok 识别不了,你遇到过吗
博主 四季天书
@wamdy.com 额,什么是识别不了?参数没传过去还是?
博主 四季天书
@wamdy.com 我看到<>都没了,你再按照这里原文的配置一下?
博主 wamdy.com
解决了,是 ProxyPreserveHost On 导致的问题