我在 centos7 docker 容器上安装了 nginx。
端口 80 可从外部使用,尽管该端口未在防火墙中打开。公共区域规则如下:
# firewall-cmd --zone=public --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: eno3
sources:
services: dhcpv6-client ssh
ports:
protocols:
masquerade: no
forward-ports:
sourceports:
icmp-blocks:
rich rules:
Run Code Online (Sandbox Code Playgroud)
但是 DOCKER 链中这个端口有一条自动规则:
# iptables -L DOCKER
Chain DOCKER (1 references)
target prot opt source destination
ACCEPT tcp -- anywhere 172.17.0.2 tcp dpt:http
Run Code Online (Sandbox Code Playgroud)
如何从外部关闭此端口?我已经运行了该命令,但没有帮助:
# firewall-cmd --zone=public --remove-port=80/tcp --permanent
Warning: NOT_ENABLED: 80:tcp
success
Run Code Online (Sandbox Code Playgroud)
我已阅读文档 - https://docs.docker.com/engine/userguide/networking/ 但仍然不明白..实际上我只需要为我指定的网络 1.2.3.4/24 打开此端口 80。
我需要将POST请求发送到我的Nginx前端服务器,该服务器应将其重定向到上游服务器。详细说明:
发送请求到http://192.168.0.10/foo/bar/blah,此请求中的URL应该更改为http://192.168.0.21 [22,23]:8080 / foo / blah
upstream myapp {
server 192.168.0.21:8080;
server 192.168.0.22:8080;
server 192.168.0.23:8080;
}
server {
listen 80;
server_name localhost;
location /foo/bar/blah/ {
rewrite ^/foo/blah^/ /$1 break;
proxy_pass http://myapp;
}
Run Code Online (Sandbox Code Playgroud)
但是在nginx错误日志中,我看到我的请求从POST更改为GET,而且似乎也没有更改URL:
"POST /foo/bar/blah HTTP/1.1" 301 185 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64)
"GET /foo/bar/blah/ HTTP/1.1" 404 117 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64)
Run Code Online (Sandbox Code Playgroud)
如何保留我的POST请求并更改URL?
也关于我的重写规则
rewrite ^/foo/blah^/ /$1 break;
Run Code Online (Sandbox Code Playgroud)
我发现了很多更改URL的示例,它们看起来都是一样的。我真的很奇怪,这个重写规则如何将URL从/ foo / bar / blah /更改为/ foo / blah /:在documentaion中说:http : //nginx.org/en/docs/http/ngx_http_rewrite_module。 html#rewrite …