Nginx 将 POST 请求转换为 GET 请求,而 proxy_pass

Nginx 将 POST 请求转换为 GET 请求,而 proxy_pass

我有 3 个服务器:A、B、C。详情如下:

  1. 服务器 A:NGINX 服务器,URL:https://test1.example.com
  2. 服务器 B:托管 NodeJS Web 应用程序的 NGINX 服务器,URL:http://test2.example.com
  3. 服务器 C:托管 Django Web 应用程序的 Apache2 服务器,URL:http://test3.example.com

服务器 A(NGINX 服务器)是面向公众的前端服务器,使用 proxy_pass 充当负载平衡器。服务器 B(NGINX 服务器)有一个表单,并通过 POST 请求将其提交给服务器 C(使用 Apache2 的 UWSGI Django 服务器)。请求来自服务器 B,网址为:https://test1.example.com/register到服务器 C,但服务器 A 正在将其转换为 GET 请求。

所以我得到了 2 个请求日志,一个使用 POST,另一个使用 GET,路径相同为“/register”

该设置如图所示(图表位于帖子末尾)。

配置如下:

  1. 服务器 A:

    server {
    
       listen 443 ssl http2;
       listen [::]:443 ssl http2;
       server_name test1.example.com;
    
        ssl_certificate /etc/ssl/test1/test1.example.com.crt;
        ssl_certificate_key /etc/ssl/test1/test1.example.com.key;
    
       # Proxy/Loadbalancer configuration`
    
       # Testing the request`
    
            location / {
              proxy_pass http://test2.example.com;
            }
    
            location /register/{
                    proxy_pass http://test3.example.com;
            }
    }
    
  2. 服务器B:

    server {
    
        listen 80 default_server;
    
        listen [::]:80 default_server;
    
        root /var/www/html;
    
        # Add index.php to the list if you are using PHP
        index index.html index.htm;
    
        server_name test2.example.com;
    
        location / {
                #try_files $uri $uri/ =404;
                 try_files $uri $uri/ /index.html;
        }
    
        access_log /var/log/nginx/access.log;
        error_log  /var/log/nginx/error.log;
    

    }

  3. 服务器C:

    <VirtualHost *:80>
    ServerName  test3.example.com
    ServerAdmin [email protected]
    DocumentRoot /var/www/test
    
    Alias /static/  /var/www/test/webapp/static/
    Alias /media/  /var/www/test/media/
    
    WSGIScriptAlias /   /var/www/test/webapp/wsgi.py
    WSGIDaemonProcess   cdac.in  python-path=/var/www/test \
        python-home=/var/www/test/venv  processes=5   threads=8
    WSGIProcessGroup cdac.in
    <Directory /var/www/test/webapp/>
        Options -Indexes
        Order deny,allow
        Allow from all
        Require all granted
    </Directory>
    
    LogLevel info
    
    # PROJECT_NAME is used to separate the log files of this application
    ErrorLog    /var/log/apache2/error.log
    CustomLog   /var/log/apache2/access.log combined
    

我哪里做错了。

设置图

相关内容