My issue:
sometimes nginx 1.18.0 reveive 1 request from client and then send this request repeatedly to server, nginx and the backend server run on the same machine. Below is the content from access.log, the first request’s ip is 112.24.xxx.xxx which is my real ip addr while the second one is with ip 220.196.xxx.xxx.
112.24.xxx.xxx - - [09/Apr/2025:13:14:40 +0800] “GET /accounts/send_code?phone_number=xxx HTTP/1.1” 200 32 “-” “PostmanRuntime/7.43.3”
220.196.xxx.xxx - - [09/Apr/2025:13:17:41 +0800] “GET /accounts/send_code?phone_number=xxx HTTP/1.1” 200 32 “-” “PostmanRuntime/7.43.3”
How I encountered the problem:
sent 1 request to get 1 code but got 2 or even 3 sometimes instead
Solutions I’ve tried:
not tried yet since it’s a production server and there’s no such issue on my local vm with the same config. After googling possible problem might be that nginx connection timeout so it resend request, but in my case the original and repeat one are all getting response code 200. Also someone said they solve this kind of problem by change GET to POST.
My config:
nginx.conf:
user ubuntu www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;
events {
worker_connections 768;
# multi_accept on;
}
http {
##
# Basic Settings
##
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
# server_tokens off;
# server_names_hash_bucket_size 64;
# server_name_in_redirect off;
include /etc/nginx/mime.types;
default_type application/octet-stream;
##
# SSL Settings
##
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Dropping SSLv3, ref: POODLE
ssl_prefer_server_ciphers on;
##
# Logging Settings
##
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
##
# Gzip Settings
##
gzip on;
# gzip_vary on;
# gzip_proxied any;
# gzip_comp_level 6;
# gzip_buffers 16 8k;
# gzip_http_version 1.1;
# gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
##
# Virtual Host Configs
##
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
/sites-enabled/account-service:
server {
listen 8003;
server_name xxx.xxx.xxx.xxx 127.0.0.1 localhost;
location /static/ {
root /home/account-service;
}
location / {
include proxy_params;
proxy_pass http://unix:/run/gunicorn.sock;
}
}