一、問題描述
首先看到的頁面是nginx返回的頁面,得知錯誤要從nginx上來解決
<html>
<head><title>405 Not Allowed</title></head>
<body bgcolor="white">
<center><h1>405 Not Allowed</h1></center>
<hr><center>nginx/1.0.11</center>
</body>
</html>
二、問題原因
因?yàn)檫@里請求的靜態(tài)文件采用的是post方法,nginx是不允許post訪問靜態(tài)資源。題話外,試著post訪問了下www.baidu.com發(fā)現(xiàn)頁面也是報(bào)錯,可以試著用get方式訪問
三、解決辦法(三種)
(1)將405錯誤指向成功(我采用的這種方法解決的問題)
靜態(tài)server下的location加入 error_page 405 =200 $uri;
location / {
root /usr/share/nginx/html/cashier;
try_files $uri $uri/ /index.html;
index index.html index.htm;
error_page 405 =200 $request_uri; // $request_uri這個參數(shù)的含義下面有解釋
}
(2)修改nginx下src/http/modules/ngx_http_static_module.c文件
if (r->method & NGX_HTTP_POST) {
return NGX_HTTP_NOT_ALLOWED;
}
以上這一段注釋掉,重新編譯,將make install編譯生成的nginx文件復(fù)制到sbin下 重啟nginx
(3)修改錯誤界面指向
upstream static_backend {
server localhost:80;
}
server {
listen 80;
# ...
error_page 405 =200 @405; // 注意 405后面是要接空格的,而不是因?yàn)榇蝈e了字符
location @405 {
root /srv/http;
proxy_method GET;
proxy_pass http://static_backend;
}
}
(4)詳細(xì)描述
405 Method Not Allowed是一個HTTP 響應(yīng)狀態(tài)代碼,表示服務(wù)器接收并識別了指定的請求HTTP 方法,但服務(wù)器拒絕了請求資源的特定方法。此代碼響應(yīng)確認(rèn)請求的資源有效且存在,但客戶端在請求期間使用了不可接受的 HTTP 方法。
四、Nginx $request_uri和$uri詳解
$uri
nginx中的$uri
記錄的是執(zhí)行一系列內(nèi)部重定向操作后最終傳遞到后端服務(wù)器的URL
包含請求的文件名和路徑,不包含“?”或“#”
等參數(shù)。
完整URL鏈接:http://www.alipay.com/alipay/index.html
$uri:/alipay/index.html
$request_uri
$request_uri
記錄的是當(dāng)前請求的原始URL(包含參數(shù)),如果沒有執(zhí)行內(nèi)部重定向操作,request_uri
去掉參數(shù)后的值和uri
的值是一樣的。在線上環(huán)境中排查問題是,如果在后端服務(wù)器中看到的請求和Nginx中存放的request_uri
無法匹配,可以考慮去uri
里邊進(jìn)行查找。
包含請求的文件名和路徑及所有參數(shù)文章來源:http://www.zghlxwxcb.cn/news/detail-567266.html
完整URL鏈接:http://www.alipay.com/alipay/index.html
$request_uri:/alipay/index.html#參數(shù)文章來源地址http://www.zghlxwxcb.cn/news/detail-567266.html
到了這里,關(guān)于【nginx】405 not allowed問題解決方法的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!