Home > database >  nginx redirect fails if original request is non-existent
nginx redirect fails if original request is non-existent

Time:05-31

Problem Statement: nginx appears not to redirect when the original request is a non-existent location. All other redirects appear to work just fine. It is also possible that php is not executing the script on the redirected page. nginx conf is provided below.

Questions: What am I missing and what do I need to do to make this work? Is it possible that nginx does not support redirection from a non-existent page?

Some context may be helpful: Here is a typical request that is being redirected:

73.234.24.22 - - [30/May/2022:16:15:05  0000] "GET /postevent3.asp?dta=05/30/22 16:15:22 507 +149642656 -254084882 -0001787 682829361 HTTP/1.1" 302 154 "-" "-"

Please note that there is no page display intended for this request; the request is dumped into a buffer, processed and written to a database. Please see the end of this post for an extract from the nginx debug log.

It is not practical to change the URL because there are dozens of units scattered about the world. Most units cannot be updated remotely.

The original site that is not in use now, utilized apache. The current site uses nginx. I am not very conversant with web servers, so I have probably missed something obvious. All thoughts will be appreciated.

I have also tried the following in the port 80 server block:

location / {
    try_files $uri $uri/ /data/submit_legacy.php?$query_string;
}

nginx conf file-----------------------------------------------------------------------

server {
    listen 80;
    listen [::]:80;
    root /var/www/example.org;
    server_name example.org www.example.org ;
    index index.php index.html index.htm;
    expires    -1;
    rewrite_log on;
    error_log /var/www/example.org/data/http-org-submit.log debug;

#=# ========================================================================= #=#       
#=# Intercept request for postevent3.asp and send it data/submit_legacy.php,  #=# 
#=# be sure to change to return 301 when testing is complete                  #=#       
#=# ========================================================================= #=#       

    location = /postevent3.asp {
        return 302 https://example.org/data/submit_legacy.php?$query_string; 
    }       

    location / {
        return 302 https://$host$request_uri;
    }
}

server {
    listen [::]:443 ssl http2; # managed by Certbot
    listen 443 ssl http2; # managed by Certbot
    root /var/www/example.org;
    server_name example.org www.example.org;
    index index.php index.html index.htm;
    expires    -1;
    
    rewrite_log on;
    error_log /var/www/example.org/data/https-org-submit.log debug;

    location / {
        try_files $uri $uri/ /index.php$is_args$args;
    }

    
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php7.4-fpm.sock;
        fastcgi_param   SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

    ssl_certificate /etc/letsencrypt/live/example.org/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/example.org/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypta/ssl-dhparams.pem; # managed by Certbot
    add_header Strict-Transport-Security "max-age=31536000;  includeSubDomains";
    add_header X-Frame-Options SAMEORIGIN;
    add_header X-Content-Type-Options nosniff;
    
    client_max_body_size 100M;  
}

Extract from nginx debug file:---------------------------------------------------------------

2022/05/30 17:35:15 [debug] 37669#37669: *1 write new buf t:1 f:0 000055BC271BE300, pos 000055BC271BE300, size: 390 file: 0, size: 0
2022/05/30 17:35:15 [debug] 37669#37669: *1 http write filter: l:0 f:0 s:390
2022/05/30 17:35:15 [debug] 37669#37669: *1 http output filter "/postevent3.asp?dta=05/30/22 17:35:32 564 +188886495 +025481359 +0005990 570742577"
2022/05/30 17:35:15 [debug] 37669#37669: *1 http copy filter: "/postevent3.asp?dta=05/30/22 17:35:32 564 +188886495 +025481359 +0005990 570742577"
2022/05/30 17:35:15 [debug] 37669#37669: *1 image filter
2022/05/30 17:35:15 [debug] 37669#37669: *1 xslt filter body
2022/05/30 17:35:15 [debug] 37669#37669: *1 http postpone filter "/postevent3.asp?dta=05/30/22 17:35:32 564 +188886495 +025481359 +0005990 570742577" 000055BC271BE5D0
2022/05/30 17:35:15 [debug] 37669#37669: *1 write old buf t:1 f:0 000055BC271BE300, pos 000055BC271BE300, size: 390 file: 0, size: 0
2022/05/30 17:35:15 [debug] 37669#37669: *1 write new buf t:0 f:0 0000000000000000, pos 000055BC260A7AC0, size: 92 file: 0, size: 0
2022/05/30 17:35:15 [debug] 37669#37669: *1 write new buf t:0 f:0 0000000000000000, pos 000055BC260A7E20, size: 62 file: 0, size: 0
2022/05/30 17:35:15 [debug] 37669#37669: *1 http write filter: l:1 f:0 s:544
2022/05/30 17:35:15 [debug] 37669#37669: *1 http write filter limit 0
2022/05/30 17:35:15 [debug] 37669#37669: *1 writev: 544 of 544
2022/05/30 17:35:15 [debug] 37669#37669: *1 http write filter 0000000000000000
2022/05/30 17:35:15 [debug] 37669#37669: *1 http copy filter: 0 "/postevent3.asp?dta=05/30/22 17:35:32 564 +188886495 +025481359 +0005990 570742577"
2022/05/30 17:35:15 [debug] 37669#37669: *1 http finalize request: 0, "/postevent3.asp?dta=05/30/22 17:35:32 564 +188886495 +025481359 +0005990 570742577" a:1, c:1
2022/05/30 17:35:15 [debug] 37669#37669: *1 set http keepalive handler
2022/05/30 17:35:15 [debug] 37669#37669: *1 http close request
2022/05/30 17:35:15 [debug] 37669#37669: *1 http log handler
2022/05/30 17:35:15 [debug] 37669#37669: *1 free: 000055BC271E7D10, unused: 10
2022/05/30 17:35:15 [debug] 37669#37669: *1 free: 000055BC271BDE40, unused: 1875
2022/05/30 17:35:15 [debug] 37669#37669: *1 free: 000055BC2719E1B0
2022/05/30 17:35:15 [debug] 37669#37669: *1 hc free: 0000000000000000
2022/05/30 17:35:15 [debug] 37669#37669: *1 hc busy: 0000000000000000 0
2022/05/30 17:35:15 [debug] 37669#37669: *1 tcp_nodelay
2022/05/30 17:35:15 [debug] 37669#37669: *1 reusable connection: 1
2022/05/30 17:35:15 [debug] 37669#37669: *1 event timer add: 32: 65000:84579871
2022/05/30 17:35:15 [debug] 37669#37669: *1 http keepalive handler
2022/05/30 17:35:15 [debug] 37669#37669: *1 malloc: 000055BC2719E1B0:1024
2022/05/30 17:35:15 [debug] 37669#37669: *1 recv: eof:1, avail:-1
2022/05/30 17:35:15 [debug] 37669#37669: *1 recv: fd:32 0 of 1024
2022/05/30 17:35:15 [info] 37669#37669: *1 client 93.181.63.177 closed keepalive connection
2022/05/30 17:35:15 [debug] 37669#37669: *1 close http connection: 32
2022/05/30 17:35:15 [debug] 37669#37669: *1 event timer del: 32: 84579871
2022/05/30 17:35:15 [debug] 37669#37669: *1 reusable connection: 0
2022/05/30 17:35:15 [debug] 37669#37669: *1 free: 000055BC2719E1B0
2022/05/30 17:35:15 [debug] 37669#37669: *1 free: 000055BC271E7B00, unused: 136
2022/05/30 17:35:15 [debug] 37669#37669: *2 http header: "Host: www.example.org"
2022/05/30 17:35:15 [debug] 37669#37669: *2 http header done
2022/05/30 17:35:15 [debug] 37669#37669: *2 event timer del: 32: 84575067
2022/05/30 17:35:15 [debug] 37669#37669: *2 generic phase: 0
2022/05/30 17:35:15 [debug] 37669#37669: *2 rewrite phase: 1
2022/05/30 17:35:15 [debug] 37669#37669: *2 test location: "/"
2022/05/30 17:35:15 [debug] 37669#37669: *2 test location: "postevent3.asp"
2022/05/30 17:35:15 [debug] 37669#37669: *2 using configuration "=/postevent3.asp"
2022/05/30 17:35:15 [debug] 37669#37669: *2 http cl:-1 max:1048576
2022/05/30 17:35:15 [debug] 37669#37669: *2 rewrite phase: 3
2022/05/30 17:35:15 [debug] 37669#37669: *2 http set discard body
2022/05/30 17:35:15 [debug] 37669#37669: *2 http script copy: "https://example.org/data/submit_legacy.php?"
2022/05/30 17:35:15 [debug] 37669#37669: *2 http script var: "dta=10/14/02 17:35:24 00096 +204823178 +089853375 +0008360 634488566 
10/14/02 17:35:27 00096 +204823175 +089853369 +0008402 392294994 
10/14/02 17:35:31 00096 +204823170 +089853326 +0008462 215533034 
10/14/02 17:35:32 00096 +204823166 +089853317 +0008472 020574633 
"
2022/05/30 17:35:15 [debug] 37669#37669: *2 http finalize request: 302, "/postevent3.asp?dta=10/14/02 17:35:24 00096 +204823178 +089853375 +0008360 634488566 
10/14/02 17:35:27 00096 +204823175 +089853369 +0008402 392294994 
10/14/02 17:35:31 00096 +204823170 +089853326 +0008462 215533034 
10/14/02 17:35:32 00096 +204823166 +089853317 +0008472 020574633 
" a:1, c:1
2022/05/30 17:35:15 [debug] 37669#37669: *2 http special response: 302, "/postevent3.asp?dta=10/14/02 17:35:24 00096 +204823178 +089853375 +0008360 634488566 
10/14/02 17:35:27 00096 +204823175 +089853369 +0008402 392294994 
10/14/02 17:35:31 00096 +204823170 +089853326 +0008462 215533034 
10/14/02 17:35:32 00096 +204823166 +089853317 +0008472 020574633 
"
2022/05/30 17:35:15 [debug] 37669#37669: *2 http set discard body
2022/05/30 17:35:15 [debug] 37669#37669: *2 xslt filter header
2022/05/30 17:35:15 [debug] 37669#37669: *2 HTTP/1.1 302 Moved Temporarily
Server: nginx/1.18.0 (Ubuntu)
Date: Mon, 30 May 2022 17:35:15 GMT
Content-Type: text/html
Content-Length: 154
Connection: keep-alive
Location: https://example.org/data/submit_legacy.php?dta=10/14/02 17:35:24 00096 +204823178 +089853375 +0008360 634488566 
10/14/02 17:35:27 00096 +204823175 +089853369 +0008402 392294994 
10/14/02 17:35:31 00096 +204823170 +089853326 +0008462 215533034 
10/14/02 17:35:32 00096 +204823166 +089853317 +0008472 020574633 

Expires: Mon, 30 May 2022 17:35:14 GMT
Cache-Control: no-cache

CodePudding user response:

If my guess that software initiated this request is unable to interpret the 302 HTTP redirection code and issue a new request is correct, your only way is to process the request inside the HTTP block itself. Instead of your current

location = /postevent3.asp {
    return 302 https://example.org/data/submit_legacy.php?$query_string; 
}       

you can check this piece of configuration:

location = /postevent3.asp {
    rewrite ^ /data/submit_legacy.php break;
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root$uri;
    fastcgi_pass unix:/run/php/php7.4-fpm.sock;
}

If using this configuration your requests will start to appear in your database, that will definitely means my original guess is correct.

  • Related