У меня проблема в том, что 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;
}
}
}