иногда nginx меняет метод без причины (POST -> 01POST для прокси-кота) - PullRequest
0 голосов
/ 27 октября 2019

У меня проблема в том, что nginx возвращает ошибку 501 (из-за получения странного метода) или 200 OK для тех же запросов. Я использую nginx 1.16.0 в качестве веб-сервера и tomcat 7.0.54. Обратный прокси Nginx для их подключения. (Также я использую Java-пружину.) Иногда tomcat получает странный метод.

пример) nginx access.log

10.33.xxx.xxx - [25/Oct/2019:16:21:19 +0900] "POST /ajax/test?ts=1571988079124 HTTP/1.1" [501] 1147 0.006 "https://test.com" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36"

tomcat access.log

127.0.0.1 - - [25/Oct/2019:16:21:19 +0900] "01POST /ajax/test?ts=1571988079124 HTTP/1.1" 501 1147 "https://test.com" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36"

Как вывидно, клиентский метод запроса POST, но tomcat получает метод 01POST. Это странно, потому что это происходит случайным образом, даже если это один и тот же URL, параметр и запрошенный пользователь.

Я пытаюсь установить proxy_method для запроса метода, подобного этому.

nginx.conf

proxy_method $request_method;

Но это не работает. Tomcat все еще получает странный метод ...

Я ожидаю, что nginx (или tomcat) не вернет 501.


Моя конфигурация - nginx.conf

user  irteam;
worker_processes  auto;

pid        /home1/irteam/apps/nginx/nginx.pid;

events {
    worker_connections  16000;
    use epoll;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    #default on
    server_tokens off;

    tcp_nopush on;
    tcp_nodelay on;

    access_log  logs/access.log  combined;
    error_log logs/error.log error;

    sendfile on;
    etag on;

    keepalive_timeout 25s;   #default 75s
    keepalive_requests 150;   #default 100

    client_max_body_size 20M;  # default 1M
    client_body_timeout 60s;   # default 60s
    client_body_buffer_size 512k;  #default 8k|16k
    client_header_timeout 60s;   # default 60s
    client_header_buffer_size 8k;  #default 1k
    send_timeout 60s;  #default 60s
    large_client_header_buffers 20 32k; #default 4 8k

    gzip  on;
    gzip_types text/html application/javascript text/css application/json text/javascript;
    gzip_disable "MSIE[4-6]\.";

    root   /home1/irteam/test;

    # upstream
    upstream tomcat {
        server 127.0.0.1:8080 max_fails=0;
        keepalive 30;
    }


    proxy_pass_header Server;
    proxy_set_header Host $http_host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_method $request_method;
    proxy_http_version 1.1;
    proxy_set_header Connection "";

    proxy_buffering off;  #default on
    proxy_request_buffering off;  #default on
    proxy_buffer_size 32k;  #default 4k|8k
    proxy_buffers 20 32k;  #default 8 4k|8k
    proxy_connect_timeout 60s;  #default 60s
    proxy_read_timeout 60s;  #default 60s
    proxy_send_timeout 60s;  #default 60s

    #HTTP Server
    server {
        listen       80;
        server_name  test.com;

        access_log  logs/access.log  combined;
        error_log logs/error.log error;

        rewrite ^((?!http_stub_status).)*$ https://$host$uri permanent;


        location / {
            allow all;
            index  index.html index.jsp;
            proxy_pass http://tomcat;
        }


        #gzip static
        location ~ .*\.(css|js|js.gz|css.gz)$ {
            gzip_vary on;

            expires 1w;
        }

        #static
        location ~ .*\.(swf|jpe?g|png|gif|bmp|ico)$ {
            expires 1w;
        }

        location /http_stub_status {
            stub_status on;
            access_log off;
            allow 127.0.0.1;
            deny all;
        }
    }

    #HTTPS Server
    server {
        listen       443 ssl;
        server_name  test.com;

        access_log  logs/access.log  combined;
        error_log logs/error.log error;

        ssl_certificate      /home1/irteam/apps/nginx/conf/test.cert.pem;
        ssl_certificate_key  /home1/irteam/apps/nginx/conf/test.key.pem;

        ssl_session_cache    shared:SSL:600m;
        ssl_session_timeout  5m;

        ssl_ciphers  EECDH+aRSA+AESGCM:EECDH+aRSA+SHA256:EECDH+aRSA+RC4:EECDH:RSA+AESGCM:RC4:!LOW:!EXP:!PSK:!KRB5:!MD5:!aNULL:!eNULL:ALL;
        ssl_prefer_server_ciphers  on;

        ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;

        rewrite ^/$ /main permanent;


        location / {
            allow all;
            index  index.html index.jsp;
            proxy_pass http://tomcat;
        }


        #gzip static
        location ~ .*\.(css|js|js.gz|css.gz)$ {
            gzip_vary on;

            expires 1w;
        }

        #static
        location ~ .*\.(swf|jpe?g|png|gif|bmp|ico)$ {
            expires 1w;
        }

        location /http_stub_status {
            stub_status on;
            access_log off;
            allow 127.0.0.1;
            deny all;
        }
    }
}
...