我正在尝试在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上的专用ip1。
但是,如今,我需要稍微调整配置文件。
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上的专用ip2。顺便说一句,在另一种情况下,当我使用 nginx -t 命令时,出现跟随错误:“ proxy_pass”不能在正则表达式指定的位置或命名位置内包含URI部分
那么,有人可以帮助这个菜鸟解决他的问题吗?提前致谢。我将在下面让我正在阅读的链接:
答案 0 :(得分:1)
您想使用location / { ... }
块作为通配符,因为它与任何与另一个location
块都不匹配的URI匹配。
在proxy_pass
语句中不需要URI组件,因为在向上游发送URI之前没有修改URI。有关详细信息,请参见df.merge()。
通过在外部块中指定proxy_set_header
语句并允许两个location
块继承它们,可以节省键入的时间。有关详细信息,请参见this document。
例如:
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";
}