目次
1. 問題の説明
最初に表示されるページは 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>
2. 問題の原因
ここで要求された静的ファイルは post メソッドを使用するため、nginx では post が静的リソースにアクセスすることを許可しません。話は逸れますが、投稿しようとして www.baidu.com にアクセスしたところ、ページでもエラーが報告されていることがわかりました。get メソッドを使用してアクセスしてみてください。
3. ソリューション(3種類)
(1) 405エラーを成功に導く(この方法で解決した問題)
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这个参数的含义下面有解释
}
(2) nginx の src/http/modules/ngx_http_static_module.c ファイルを変更します。
if (r->method & NGX_HTTP_POST) {
return NGX_HTTP_NOT_ALLOWED;
}
上記の段落をコメントアウトし、再コンパイルして、make install によって生成された nginx ファイルを sbin にコピーし、nginx を再起動します。
(3) エラーインターフェイスのポインティングを変更する
upstream static_backend {
server localhost:80;
}
server {
listen 80;
# ...
error_page 405 =200 @405; // 注意 405后面是要接空格的,而不是因为打错了字符
location @405 {
root /srv/http;
proxy_method GET;
proxy_pass http://static_backend;
}
}
(4) 詳細説明
405 メソッドが許可されていません は、サーバーが指定された要求 HTTP メソッドを受信して認識したが、サーバーがリソースを要求する特定のメソッドを拒否したことを示す HTTP 応答ステータス コードです。このコード応答は、要求されたリソースが有効で存在するが、クライアントが要求中に受け入れられない HTTP メソッドを使用したことを確認します。
4. Nginx$request_uri
と$uri
詳しい説明
$uri
nginx に記録されるのは$uri
、一連の内部リダイレクト操作を実行した後、最終的にバックエンド サーバーに渡される URL です。
要求されたファイル名とパスが含まれますが、“?”或“#”
他のパラメータは含まれません。
完全な URL リンク: http://www.alipay.com/alipay/index.html
$uri:/alipay/index.html
$request_uri
$request_uri
記録されるのは現在のリクエストの元のURL(パラメータを含む)であり、内部リダイレクトが行われていない場合はrequest_uri
パラメータを除いた値uri
と同じになります。オンライン環境におけるトラブルシューティングの問題は、バックエンド サーバーで確認されたリクエストがrequest_uri
Nginx に保存されているリクエストと一致しない場合、uri
そこで検索することを検討できることです。
要求されたファイル名とパス、およびすべてのパラメータが含まれます
完全な URL リンク: http://www.alipay.com/alipay/index.html
$request_uri:/alipay/index.html#parameters