我有两个 VPS(一个用于故障转移),都运行 Nginx 作为后端服务器的负载均衡器。此外,我在 Nginx 上为我的域名(在 GoDaddy.com 上注册)启用并配置了 SSL。
由于我使用 DNS A 记录来配置 VPS 故障转移的域,因此我无法输入端口号(仅允许 IP 号)。因此,默认情况下域会 ping 到端口 80。但 ssl 侦听端口 443。
为此,我在 nginx 的服务器块中使用了重写方法,但它不适用于 POST 请求。虽然它适用于 GET 请求。我知道 proxy_pass 可以与 POST 请求一起使用,但这不是正确的做法(不安全)。我应该直接在 HTTPS 连接上发布请求。
这是我的 nginx 配置:
upstream tomcat_servers{
least_conn;
server 123.45.678.90:8080;
server 124.345.78.23:8180;
}
server {
listen 80;
server_name thedomain.com;
rewrite ^(.*) https://$host$request_uri? permanent;
}
server {
listen 443;
server_name thedomain.com;
....ssl config.....
location / {
proxy_pass http://tomcat_servers;
proxy_http_version 1.1;
proxy_connect_timeout 30s;
proxy_read_timeout 30s;
proxy_send_timeout 30s;
proxy_next_upstream timeout;
proxy_next_upstream error invalid_header http_500 http_502 http_404 http_503 http_504;
}
}
我应该如何配置才能使其在给定场景中与 POST 请求一起工作。
谢谢
答案1
您不应使用重定向进行发布。如果必须使用,您应使用 307 代码进行发布。最终用户可能会收到有关重定向的提示。
301 永久移动 如果响应除 GET 或 HEAD 之外的请求而收到 301 状态代码,则用户代理不得自动重定向请求,除非用户可以确认,因为这可能会改变发出请求的条件。
注意:在以下情况下自动重定向 POST 请求: 收到 301 状态代码,一些现有的 HTTP/1.0 用户代理 会错误地将其更改为 GET 请求。
307 临时重定向如果响应除 GET 或 HEAD 之外的请求而收到 307 状态代码,则用户代理不得自动重定向请求,除非用户可以确认,因为这可能会改变发出请求的条件。
看也在这里
答案2
您应该修复您的应用程序,以便它仅使用https://domain.com/page
或//domain.com/page
格式化的 URL。
重定向规则仅用于方便用户,以便他们只需输入域名即可首次访问该网站。
答案3
感谢@filmonic 和 Tero 纠正我,因为每个人都说重定向不是 POST 请求的最佳做法,所以我对服务器端网络的架构进行了更改。而且它有效。我的架构现在看起来有点像这样
________________
| |
| CLIENT |
| WEB BROWSER |
|________________|
||
|| SSL
_______\/_______
| |
| DNS SERVER |
| (NEW YORK) |
|________________|
||
||
_______/ \_______
/ \
/ SSL \ SSL
____________________ ____________________
| | | |
| SAN FRANCISCO | | NEW YORK |
|____________________| |____________________|
| ______________ | | ______________ |
| | | | | | | |
| | APP | | | | APP | |
| | LOAD BALANCE | | | | LOAD BALANCE | |
| | PROXY | | | | PROXY | |
| |_____ _____| | | |_____ _____| |
|________| |________| |________| |________|
|| __ __ ||
||<=====||==================||=====>||
\/ \/ \/ \/
____________________ ____________________
| | | |
| SAN FRANCISCO | | NEW YORK |
|____________________| |____________________|
| ______________ | | ______________ |
| | | | | | | |
| | APP SERVERS | | | | APP SERVERS | |
| |______ ______| | | |______ ______| |
| ______||______ | | ______||______ |
| | | | | | | |
| | DATABASE |<==================>| DATABASE | |
| |______________| | MASTER-SLAVE | |______________| |
|____________________| |____________________|