如何使用 NGINX 作为反向代理路由第一个 URI 段?
问题:如何使用 NGINX 作为反向代理路由第一个 URI 段? 我正在尝试在 Amazon Web Services 上构建架构/基础设施。今天我有一个像网关一样工作的 EC2,后台有 NGINX。顺便说一句,我是 NGINX 的新手。 上周我有这个 NGINX 配置文件: server { listen 80; # I put * for hide the real domain name s
问题:如何使用 NGINX 作为反向代理路由第一个 URI 段?
我正在尝试在 Amazon Web Services 上构建架构/基础设施。今天我有一个像网关一样工作的 EC2,后台有 NGINX。顺便说一句,我是 NGINX 的新手。
上周我有这个 NGINX 配置文件:
server {
listen 80;
# I put * for hide the real domain name
server_name ******.com.ar www.******.com.ar;
location / {
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $http_host;
proxy_pass "http://private.ip.1:80/";
}
}
而且效果很好!当我访问 www.domain.com.ar 时,我会重定向到端口 80 上的私有 ip 1。
但是,现在,我需要稍微调整一下配置文件。
- 首先,我需要将一些已知路径重定向到私有 ip 1(例如 /company、/portfolio、/services、/contact 和子序列:/company/ourvision、/services/software、/contact/workwithus)。我使用的是 NodeJS,而不是 PHP。
2)如果之前的路径都没有匹配,我需要将第一个 URI 段作为通配符(例如http://domain.com.ar/*)仅匹配此字符:** A-z0-9** 并发送到端口 3000 上的私有 ip 2,我也需要发送通配符(例如http://private.ip.2:3000/wildcard-word)
我只是想在我的第二点上取得成功,但我无法应对。
server {
listen 80;
server_name ******.com.ar www.******.com.ar;
location / {
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $http_host;
proxy_pass "http://private.ip.1:80/";
}
location ~ ^/(.*)/?$ {
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $http_host;
proxy_pass "http://private.ip.2:3000/$1";
}
}
但这行不通。当我转到http://example.com.ar时,我直接转到端口 3000 上的私有 ip 2。顺便说一句,在另一种情况下,当我使用 nginx -t 时出现以下错误命令:"proxy_pass" 的 URI 部分不能位于正则表达式给出的位置或命名位置
那么,任何人都可以帮助这个菜鸟解决他的问题吗?提前致谢。我将让我正在阅读的链接如下:
-
通配符 url 的 nginx 规则
-
基于uri路径的nginx位置
-
如何使用 Nginx 进行 URL 重定向
-
如何使用proxy_pass重写URI nginx反向代理?
-
了解 Nginx 服务器和位置块 (DigitalOcean)
解答
您想使用location / { ... }
块作为通配符,因为它匹配任何不匹配另一个location
块的 URI。
您不需要在proxy_pass
语句中使用 URI 组件,因为您不会在将 URI 发送到上游之前对其进行修改。详见本文档。
您可以通过在外部块中指定proxy_set_header
语句并允许它们被两个location
块继承来节省打字。详见本文档。
例如:
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $http_host;
location ~ ^/(company|portfolio|services|contact|)(/|$) {
proxy_pass "http://private.ip.1:80";
}
location / {
proxy_pass "http://private.ip.2:3000";
}
更多推荐
所有评论(0)