首頁  >  問答  >  主體

如果原始請求不存在,nginx 重定向失敗

問題陳述:當原始請求是不存在的位置時,nginx 似乎不會重定向。所有其他重定向似乎都工作正常。也有可能 php 沒有在重定向頁面上執行腳本。下面提供了 nginxconf。

問題:我缺少什麼以及我需要做什麼才能完成這項工作? nginx 是否可能不支援從不存在的頁面進行重新導向?

一些上下文可能會有所幫助:這是一個正在重定向的典型請求:

73.234.24.22 - - [30/May/2022:16:15:05 +0000] "GET /postevent3.asp?dta=05%2f30%2f22%2016%3a15%3a22%20507%20%2b149642656%20%2d254084882%20%2d0001787%20682829361 HTTP/1.1" 302 154 "-" "-"

請注意,沒有針對此要求的頁面顯示;該請求被轉儲到緩衝區中,進行處理並寫入資料庫。請參閱本文末尾以獲取 nginx 調試日誌的摘錄。

更改 URL 是不切實際的,因為有數十個單位分散在世界各地。大多數設備無法遠端更新。

原來的網站現在不再使用,使用的是apache。目前站點使用nginx。我不太熟悉網頁伺服器,所以我可能錯過了一些明顯的東西。所有想法都將受到讚賞。

我還在連接埠 80 伺服器區塊中嘗試了以下操作:

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

nginxconf檔---------------------------------------- -- ----------------------------------------

#
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;  
}

從nginx 偵錯檔案中提取:------------------------------------- --- ----------------------------------------------- ---

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%2f30%2f22%2017%3a35%3a32%20564%20%2b188886495%20%2b025481359%20%2b0005990%20570742577"
2022/05/30 17:35:15 [debug] 37669#37669: *1 http copy filter: "/postevent3.asp?dta=05%2f30%2f22%2017%3a35%3a32%20564%20%2b188886495%20%2b025481359%20%2b0005990%20570742577"
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%2f30%2f22%2017%3a35%3a32%20564%20%2b188886495%20%2b025481359%20%2b0005990%20570742577" 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%2f30%2f22%2017%3a35%3a32%20564%20%2b188886495%20%2b025481359%20%2b0005990%20570742577"
2022/05/30 17:35:15 [debug] 37669#37669: *1 http finalize request: 0, "/postevent3.asp?dta=05%2f30%2f22%2017%3a35%3a32%20564%20%2b188886495%20%2b025481359%20%2b0005990%20570742577" 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%2F14%2F02%2017%3A35%3A24%2000096%20%2B204823178%20%2B089853375%20%2B0008360%20634488566%20%0D%0A10%2F14%2F02%2017%3A35%3A27%2000096%20%2B204823175%20%2B089853369%20%2B0008402%20392294994%20%0D%0A10%2F14%2F02%2017%3A35%3A31%2000096%20%2B204823170%20%2B089853326%20%2B0008462%20215533034%20%0D%0A10%2F14%2F02%2017%3A35%3A32%2000096%20%2B204823166%20%2B089853317%20%2B0008472%20020574633%20%0D%0A"
2022/05/30 17:35:15 [debug] 37669#37669: *2 http finalize request: 302, "/postevent3.asp?dta=10%2F14%2F02%2017%3A35%3A24%2000096%20%2B204823178%20%2B089853375%20%2B0008360%20634488566%20%0D%0A10%2F14%2F02%2017%3A35%3A27%2000096%20%2B204823175%20%2B089853369%20%2B0008402%20392294994%20%0D%0A10%2F14%2F02%2017%3A35%3A31%2000096%20%2B204823170%20%2B089853326%20%2B0008462%20215533034%20%0D%0A10%2F14%2F02%2017%3A35%3A32%2000096%20%2B204823166%20%2B089853317%20%2B0008472%20020574633%20%0D%0A" a:1, c:1
2022/05/30 17:35:15 [debug] 37669#37669: *2 http special response: 302, "/postevent3.asp?dta=10%2F14%2F02%2017%3A35%3A24%2000096%20%2B204823178%20%2B089853375%20%2B0008360%20634488566%20%0D%0A10%2F14%2F02%2017%3A35%3A27%2000096%20%2B204823175%20%2B089853369%20%2B0008402%20392294994%20%0D%0A10%2F14%2F02%2017%3A35%3A31%2000096%20%2B204823170%20%2B089853326%20%2B0008462%20215533034%20%0D%0A10%2F14%2F02%2017%3A35%3A32%2000096%20%2B204823166%20%2B089853317%20%2B0008472%20020574633%20%0D%0A"
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%2F14%2F02%2017%3A35%3A24%2000096%20%2B204823178%20%2B089853375%20%2B0008360%20634488566%20%0D%0A10%2F14%2F02%2017%3A35%3A27%2000096%20%2B204823175%20%2B089853369%20%2B0008402%20392294994%20%0D%0A10%2F14%2F02%2017%3A35%3A31%2000096%20%2B204823170%20%2B089853326%20%2B0008462%20215533034%20%0D%0A10%2F14%2F02%2017%3A35%3A32%2000096%20%2B204823166%20%2B089853317%20%2B0008472%20020574633%20%0D%0A
Expires: Mon, 30 May 2022 17:35:14 GMT
Cache-Control: no-cache

P粉827121558P粉827121558179 天前328

全部回覆(1)我來回復

  • P粉715304239

    P粉7153042392024-03-28 10:47:44

    如果我對發起此請求的軟體無法解釋 302 HTTP 重定向程式碼並發出新請求的猜測是正確的,那麼您唯一的方法就是在 HTTP 區塊本身內處理該請求。而不是您當前的

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

    您可以檢查此配置:

    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;
    }
    

    如果使用此配置,您的請求將開始出現在資料庫中,這肯定意味著我最初的猜測是正確的。

    回覆
    0
  • 取消回覆