欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

Nginx405notallowed異常要怎么辦處理

Nginx 405 not allowed 異常要怎么辦處理,相信很多沒(méi)有經(jīng)驗(yàn)的人對(duì)此束手無(wú)策,為此本文總結(jié)了問(wèn)題出現(xiàn)的原因和解決方法,通過(guò)這篇文章希望你能解決這個(gè)問(wèn)題。

成都創(chuàng)新互聯(lián)是一家專(zhuān)注于成都網(wǎng)站制作、成都網(wǎng)站建設(shè)與策劃設(shè)計(jì),孟村網(wǎng)站建設(shè)哪家好?成都創(chuàng)新互聯(lián)做網(wǎng)站,專(zhuān)注于網(wǎng)站建設(shè)十載,網(wǎng)設(shè)計(jì)領(lǐng)域的專(zhuān)業(yè)建站公司;建站業(yè)務(wù)涵蓋:孟村等地區(qū)。孟村做網(wǎng)站價(jià)格咨詢:13518219792

今天遇到一個(gè)問(wèn)題,當(dāng)配置好的前端工程放到服務(wù)器上使用nginx啟動(dòng)的時(shí)候,報(bào)了405 Not allowed 異常,在網(wǎng)上百度了一下,說(shuō)是這個(gè)問(wèn)題出現(xiàn)的原因是因?yàn)槭褂昧藀ost 請(qǐng)求去獲取靜態(tài)資源,我覺(jué)得很奇怪,請(qǐng)求的接口都是業(yè)務(wù)接口,并不存在請(qǐng)求靜態(tài)資源,是不是nginx對(duì)靜態(tài)資源理解有什么誤會(huì),或者說(shuō)我對(duì)靜態(tài)資源理解不對(duì),抱著這個(gè)想法,我把靜態(tài)資源的概念又梳理了一遍:

靜態(tài)資源:指的就是在html中的js/css/jpg/png/xxx.json...等等這些在前端工程中需要提前配置或者編譯之后的文件,而且這些文件并不會(huì)時(shí)刻變化或者說(shuō)變化周期比較長(zhǎng)

解決嘗試

好的,接下來(lái)我就試著根據(jù)百度出來(lái)的解決辦法都嘗試了一遍,畢竟網(wǎng)上這么多提出解決辦法的,總有一個(gè)能解決吧,于是就開(kāi)始嘗試了各種網(wǎng)友的解決辦法:

  1. location中配置error_page,這個(gè)解決問(wèn)題的思路是將post請(qǐng)求轉(zhuǎn)換成get請(qǐng)求,配置信息如下:

server {
    listen       80;
    server_name  域名;
   location /{
       root /www/文件目錄;
       index index.html index.htm index.php;
       error_page 405 =200 http://$host$request_uri;
    }
 }

這樣寫(xiě)是有問(wèn)題的,有網(wǎng)友提到這樣寫(xiě)只適用于post請(qǐng)求中不帶參數(shù)的請(qǐng)求,帶參數(shù)的post請(qǐng)求如果使用這種方式可能會(huì)導(dǎo)致參數(shù)體丟失

2. 修改nginx下src/http/modules/ngx_http_static_module.c文件,如下:

if (r->method & NGX_HTTP_POST) {
     return NGX_HTTP_NOT_ALLOWED;
}

這個(gè)辦法是修改nginx的源碼,將這一段代碼注釋掉,重新編譯,注意,注釋的時(shí)候需要使用 /* */ 的方式,而不是 # 這個(gè)符號(hào),不然會(huì)報(bào)錯(cuò),參考這個(gè)

3. 修改錯(cuò)誤界面指向(網(wǎng)上多流傳這種方式,但是沒(méi)有改變請(qǐng)求方法,所以行不通,所以采用以下方法),代碼如下:

upstream static_backend {
    server localhost:80;
}

server {
    listen 80;
    error_page 405 =200 @405;
    location @405 {
        root /srv/http;
        proxy_method GET;
        proxy_pass http://static_backend;
    }
}

這個(gè)處理的思路是將405的錯(cuò)誤信息重新指向一個(gè)命名為@405location地址,同時(shí)修改請(qǐng)求方式為get方法,這個(gè)方法同上面的第一個(gè)方法是一樣的。這個(gè)location將請(qǐng)求重新發(fā)送給proxy_pass中定義的static_backend,upstream原本是用來(lái)配置負(fù)載均衡地址的,這里直接給了一個(gè)后臺(tái)訪問(wèn)地址,思路沒(méi)問(wèn)題

不過(guò),很不幸的是,上面這些方法中我試過(guò)了第一個(gè)和第三個(gè),對(duì)我沒(méi)有效果,第二個(gè)我就不去試了,我覺(jué)得nginx這樣的設(shè)置肯定是有他的道理的,即使通過(guò)修改源碼暫時(shí)達(dá)到了預(yù)期的效果,那這樣也會(huì)帶來(lái)隱患,難道以后就不升級(jí)nginx了嗎,是吧,所以我覺(jué)得修改源碼是最不靠譜的辦法。

既然這幾個(gè)方法都沒(méi)有效果,那就看看后臺(tái)服務(wù)的日志有沒(méi)有收到請(qǐng)求,結(jié)果發(fā)現(xiàn)后臺(tái)服務(wù)啟動(dòng)之后根本就沒(méi)有收到Nginx 的任何請(qǐng)求轉(zhuǎn)發(fā),也就是說(shuō)所有的請(qǐng)求(包括get)都沒(méi)有到達(dá)后臺(tái),此時(shí)我就開(kāi)始懷疑是location配置的問(wèn)題,為什么這么說(shuō)呢,因?yàn)槿绻瞧胀ǖ?code>405 not allowed異常情況,至少get請(qǐng)求是沒(méi)有問(wèn)題的,但是在查看控制臺(tái)以及后臺(tái)服務(wù)后發(fā)現(xiàn),后臺(tái)沒(méi)有接收到請(qǐng)求,而瀏覽器的控制臺(tái)中-network一欄,get請(qǐng)求的respone是一個(gè)靜態(tài)頁(yè)面,也并不是預(yù)想中的json數(shù)據(jù),如下:

Nginx 405 not allowed 異常要怎么辦處理

而在Headers一欄顯示請(qǐng)求是OK的,如下:

根據(jù)這個(gè)情況我更加確定,這個(gè)問(wèn)題并不是它表現(xiàn)出來(lái)的 405 not allowed,很有可能是由于 location配置異常導(dǎo)致了 405 not allowed,順著這個(gè)思路我又復(fù)習(xí)了location的配置,我原來(lái)的location 配置如下:

location = /demo {
      # rewrite  ^.+demo/?(.*)$ /$1 break;
      proxy_pass  http://localhost:19998;
      proxy_set_header Host $host:$proxy_port;
      proxy_set_header  X-Real-IP        $remote_addr;
      proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for;
      proxy_set_header X-NginX-Proxy true;
      proxy_read_timeout         90;
      proxy_buffer_size          4k;
      proxy_buffers              4 32k;
      proxy_busy_buffers_size    64k;
      proxy_temp_file_write_size 64k;
    }
	
location / {
      root /home/jenkins/workspace/demo-2.0/dist;
      try_files $uri $uri/ /index.html;
      proxy_redirect http:// https://;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection "upgrade";
     }

這是一個(gè)嚴(yán)格匹配模式,在location中有3中匹配模式,參考這個(gè),分別是:

  • location = patt {} [精準(zhǔn)匹配]

  • location patt{} [普通匹配]

  • location ~ patt{} [正則匹配]

其中精準(zhǔn)匹配的優(yōu)先級(jí)最高 --> 普通匹配 --> 正則匹配。

問(wèn)題解決

我將location = /demo {}修改成了location /demo {}就解決了問(wèn)題,為什么呢?

個(gè)人理解,精準(zhǔn)匹配是需要指定到具體某一個(gè)訪問(wèn)資源的,比如:location = /demo/index.html,應(yīng)該這樣寫(xiě)才對(duì),我的post請(qǐng)求中請(qǐng)求的url地址是一個(gè)很長(zhǎng)串的地址,比如:localhost:19999/demo/user/query 這種,所以其實(shí)根本就沒(méi)有匹配到 /demo,而是匹配到了最下面的 location / {}這里,所以請(qǐng)求全都被發(fā)送到了主頁(yè)面上,導(dǎo)致nginx判斷所有的請(qǐng)求都是在請(qǐng)求一個(gè)index.html,這違反了nginx的設(shè)計(jì)原則,即:不允許靜態(tài)文件響應(yīng)POST請(qǐng)求,所以才出現(xiàn)了***404 not allowed*** 的異常。

看完上述內(nèi)容,你們掌握Nginx 405 not allowed 異常要怎么辦處理的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!

網(wǎng)頁(yè)標(biāo)題:Nginx405notallowed異常要怎么辦處理
文章網(wǎng)址:http://chinadenli.net/article8/ihspip.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供云服務(wù)器關(guān)鍵詞優(yōu)化、靜態(tài)網(wǎng)站、網(wǎng)站內(nèi)鏈、App開(kāi)發(fā)、外貿(mào)網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

手機(jī)網(wǎng)站建設(shè)