2017-02-10 18 views
4

php5.6とnginxのsynologyを使ってウェブサイトを設定しようとしています。ウェブサイトはWordPressとテーマです。デモのインポートを処理する際、NGINXエラー405(許可されていません)があります。Nginx - 405 NOT ALLOWED - fastcgi timeout

私は物事が適切に行われたときに好きなので、それはちょっとイライラしています。

私はphp.iniファイルとnginx.confファイルを調べました。

# Copyright (c) 2000-2016 Synology Inc. All rights reserved. 

worker_processes  auto; 
#worker_cpu_affinity auto; 
worker_rlimit_nofile 65535; 

include conf.d/main.conf; 

events { 
    use    epoll; 
    multi_accept on; 
    worker_connections 1024; 

    include conf.d/events.conf; 
} 

http { 
    include   mime.types; 
    default_type application/octet-stream; 

    log_format main '$remote_addr - $remote_user [$time_local] "$request" ' 
     '$status $body_bytes_sent "$http_referer" ' 
     '"$http_user_agent" "$http_x_forwarded_for"'; 

    access_log off; 
    #access_log syslog:server=unix:/dev/log,facility=local7,tag=nginx_access,nohostname main; 
    error_log syslog:server=unix:/dev/log,facility=local7,tag=nginx_error,nohostname error; 

    sendfile  on; 
    server_tokens off; 

    proxy_request_buffering  off; 
    fastcgi_request_buffering off; 
    scgi_request_buffering  off; 

    proxy_buffering  off; 
    fastcgi_buffering off; 
    scgi_buffering  off; 

    resolver_timeout    5s; 
    client_header_timeout   10s; 
    client_body_timeout   60s; 
    send_timeout     60s; 
    keepalive_timeout    65s 20s; 
    client_max_body_size   0; 
    server_names_hash_max_size 8192; 

    ssl_certificate   /usr/syno/etc/certificate/system/default/fullchain.pem; 
    ssl_certificate_key  /usr/syno/etc/certificate/system/default/privkey.pem; 
    ssl_protocols    TLSv1 TLSv1.1 TLSv1.2; 
    ssl_ciphers    ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:ECDHE-RSA-DES-CBC3-SHA:ECDHE-ECDSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA; 
    ssl_dhparam    /usr/syno/etc/ssl/dh2048.pem; 
    ssl_prefer_server_ciphers on; 

    gzip_disable "msie6"; 
    gzip_min_length 1000; 
    gzip_types  text/plain text/css application/javascript application/json; 
    gzip_vary  on; 
    gzip_static  on; 

    upstream synoscgi { 
     server unix:/run/synoscgi.sock; 
    } 

    index index.html index.htm index.php; 

    set_real_ip_from 127.0.0.1; 
    real_ip_header X-Real-IP; 

    server { 
     listen 5000 default_server; 
     listen [::]:5000 default_server; 

     server_name _; 

     gzip on; 

     include app.d/alias.*.conf; 
     root /usr/syno/synoman; 
     index index.cgi; 

     ignore_invalid_headers off; 

     include app.d/dsm.*.conf; 
     include /usr/syno/share/nginx/conf.d/dsm.*.conf; 
     include conf.d/dsm.*.conf; 

     location =/{ 
      try_files $uri /index.cgi$is_args$query_string; 
     } 

     location ~ ^/volume(?:X|USB|SATA|Gluster)?\d+/ { 
      internal; 

      root /; 

      include app.d/x-accel.*.conf; 
      include conf.d/x-accel.*.conf; 
     } 

     location ~ /webman/modules/(PersonalSettings|ExternalDevices|FileBrowser)/index_ds.php$ { 
      alias /usr/syno/share/OAuth/index_ds.php; 
      default_type text/html; 
     } 

     location ~ \.cgi { 
      include    scgi_params; 
      scgi_read_timeout 3600s; 
      scgi_pass   synoscgi; 
     } 

     error_page 403 404 500 502 503 504 @error_page; 

     location @error_page { 
      root /usr/syno/share/nginx; 
      rewrite (.*) /error.html break; 
     } 

     location ~ ^/webman/modules/Indexer/ { 
      deny all; 
     } 

     location ~ ^/webapi/lib/ { 
      deny all; 
     } 

     location ~ ^/webapi/(:?(:?.*)\.lib|(:?.*)\.api|(:?.*)\.auth|lib.def)$ { 
      deny all; 
     } 

     location ~ /\. { access_log off; log_not_found off; deny all; } 

     location ~* \.(?:js|css|png|jpg|gif|ico)$ { 
      access_log off; 
      log_not_found off; 
     } 

     location = /favicon.ico { 
      access_log off; 
      log_not_found off; 
     } 

     location = /robots.txt { 
      allow all; 
      access_log off; 
      log_not_found off; 
     } 

    } 

    server { 
     listen 5001 default_server ssl; 
     listen [::]:5001 default_server ssl; 

     server_name _; 

     include app.d/alias.*.conf; 
     root /usr/syno/synoman; 
     index index.cgi; 

     ignore_invalid_headers off; 

     include app.d/dsm.*.conf; 
     include /usr/syno/share/nginx/conf.d/dsm.*.conf; 
     include conf.d/dsm.*.conf; 

     location =/{ 
      try_files $uri /index.cgi$is_args$query_string; 
     } 

     location ~ ^/volume(?:X|USB|SATA|Gluster)?\d+/ { 
      internal; 

      root /; 

      include app.d/x-accel.*.conf; 
      include conf.d/x-accel.*.conf; 
     } 

     location ~ /webman/modules/(PersonalSettings|ExternalDevices|FileBrowser)/index_ds.php$ { 
      alias /usr/syno/share/OAuth/index_ds.php; 
      default_type text/html; 
     } 

     location ~ \.cgi { 
      include    scgi_params; 
      scgi_read_timeout 3600s; 
      scgi_pass   synoscgi; 
     } 

     error_page 403 404 500 502 503 504 @error_page; 

     location @error_page { 
      root /usr/syno/share/nginx; 
      rewrite (.*) /error.html break; 
     } 

     location ~ ^/webman/modules/Indexer/ { 
      deny all; 
     } 

     location ~ ^/webapi/lib/ { 
      deny all; 
     } 

     location ~ ^/webapi/(:?(:?.*)\.lib|(:?.*)\.api|(:?.*)\.auth|lib.def)$ { 
      deny all; 
     } 

     location ~ /\. { access_log off; log_not_found off; deny all; } 

     location ~* \.(?:js|css|png|jpg|gif|ico)$ { 
      access_log off; 
      log_not_found off; 
     } 

     location = /favicon.ico { 
      access_log off; 
      log_not_found off; 
     } 

     location = /robots.txt { 
      allow all; 
      access_log off; 
      log_not_found off; 
     } 

    } 

    server { 
     listen 80 default_server; 
     listen [::]:80 default_server; 
     listen 443 default_server ssl; 
     listen [::]:443 default_server ssl; 

     server_name _; 

     location ~ ^/volume(?:X|USB|SATA|Gluster)?\d+/ { 
      internal; 

      root /; 

      include app.d/x-accel.*.conf; 
      include conf.d/x-accel.*.conf; 
     } 

     include app.d/www.*.conf; 
     include app.d/alias.*.conf; 
     include /usr/syno/share/nginx/conf.d/www.*.conf; 
     include conf.d/www.*.conf; 

     location = /webman/pingpong.php { 
      rewrite /webman/pingpong.php /webman/pingpong.cgi break; 

      root /usr/syno/synoman; 
      include scgi_params; 
      scgi_pass synoscgi; 
     } 

     location = /webdefault/images/logo.jpg { 
      alias /usr/syno/share/nginx/logo.jpg; 
     } 

     error_page 405 =200 $uri; 

     location ~* \.php$ { 
      include fastcgi_params; 
      fastcgi_index index.php; 
      fastcgi_read_timeout 240; 
      fastcgi_pass 127.0.0.1:9000; 
      fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
     } 


     error_page 403 404 500 502 503 504 @error_page; 

     location @error_page { 
      root /usr/syno/share/nginx; 
      rewrite (.*) /error.html break; 
     } 

     location ^~ /.well-known/acme-challenge { 
      root /var/lib/letsencrypt; 
      default_type text/plain; 
     } 

     include app.d/.location.webstation.conf*; 

     location ~ ^/$ { 

      if ($scheme = https) { 
       rewrite/https://$host:5001/ redirect; 
      } 

      rewrite/http://$host:5000/ redirect; 

     } 
    } 

    include conf.d/http.*.conf; 
    include app.d/server.*.conf; 
    include sites-enabled/*; 
} 

私はインターネット上で多くを検索してきましたが、これまでのところ面白いリードしかありませんでしたが、何も効果がありませんでした。

私は実際にnginx.confにこれらの行があるのはなぜですか?だから私の問題を解決できませんでした。

について
location ~* \.php$ { 
     include fastcgi_params; 
     fastcgi_index index.php; 
     fastcgi_read_timeout 240; 
     fastcgi_pass 127.0.0.1:9000; 
     fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
    } 

、ここでログファイルにエラーがある:

2017年2月10日午後06時14分07秒[エラー] 18555 18555#:* 2563上流 (110タイムアウト:応答: 上流、クライアント:xxx.xxx.xxx.xxx、サーバー:example.com、リクエスト: "POST /wp-admin/admin-ajax.php HTTP/1.1"、上流: "fastcgi:// unix:/run/php-fpm/php56-fpm.sock"、ホスト: "www.example.com"、 参照先: http://example.com/wp-admin/admin.php?page=laborator-demo-content-installer&install-pack=agency&

あなたは、私は今、いくつかの週以来、苦労してきたので...この問題を解決するための任意のアイデアを持っている場合は...事前に どうもありがとう

+0

行ったことがありますか?私は同じ問題を経験しており、1週間かそこらの検索の後に私はここで終わりました... – LukeP

+0

@LukeP私の答えを見てください。それでも問題が解決しない場合は、error_page指令の要点を投稿してください。 – mknecht

+0

@mknechtありがとう。私はそれを最後に働かせました。それが何だったのか覚えていないが、私の環境に特有のものだった。私はSynology NAS上でResourceSpace DAMを実行しています。設定はSynology DSMによって管理されています。これは、Webサーバーを再起動するたびに行った設定変更を置き換えるものです。 – LukeP

答えて

3

TL; DR-あなたのWordPressは遅すぎます。 NGINXが適切な504 GATEWAY TIMEOUTステータスコードを返すようにする方法については、下に移動してください。

長いバージョン:別々の問題が一緒に働いていて、役に立たなくなっています。

1.ワードプレス、アップストリームサーバー、それはあなたのログに110: Connection timed outを参照してください理由です、長い4分以上かかる十分な速さ

に応答していません。遅いへの解決策は、ワードプレスをスピードアップすることです。この問題を回避するには、リクエストを処理する時間を長くすることができます。これを行うには、fastcgi_read_timeout 240;ルールの番号を増やしてください。タイムアウトは秒単位で指定されているので、10分待っても問題がなければ、600に設定してください。

タイムアウトを増やすことをお勧めします。あなたは実際にパフォーマンスの問題自体に対処する必要があります。このような長い要求はNGINXやWordPressのリソースをブロックするので、あなた自身が誤ってDDoSしてしまうことがあります。

上流に時間がかかりすぎるため、NGINXは504 GATEWAY TIMEOUTと応答します。それは

2. POSTリクエストを使用して、要求を処理するために静的ファイルを使用するようにnginxのを言っている、あなたのerror_page場所で静的ファイル

にはお答えできませんすることはできません...ので。GETまたはHEADの場合は問題ありませんが、POSTではNGINXにファイルの上書き/作成を依頼するため、うまくいきません。これはNGINXの意図もサポートもしていません。 (リクエストも同様の理由で、このようPUTDELETEなどの他の変更の動詞を使用して失敗します。)名前付きの場所を使用している

注意、@error_page、用method remains POST, as the manual saysを:

If there is no need to change URI and method during internal redirection it is possible to pass error processing into a named location. 

ます既にこれの一部を知っています。そのため、error_page 405 =200 $uri;ルールが追加されました。 ...

3.内部error_pageリダイレクト。これは、私の知る限り、error_pageマニュアルのドキュメントに記載されていないデフォルトで

再帰的ではありませんが、残念ながら、これは、あなたを保存していませんそれは、次のディレクティブのドキュメントに記載されたです:

回避策:再帰error_pageを有効

のThをリダイレクトeディレクティブrecursive_error_pagesは、のエラーを処理しますが、前のエラーが処理されているのはです。

Enables or disables doing several redirects using the error_page directive. The number of such redirects is limited. 

このオプションを有効にすると、サーバーのブロックにrecursive_error_pages on;を置くことによって、あなたがキックするerror_page 405ディレクティブを許可します残念ながら

、あなたはまだ同じリソースを要求しているので、:ドキュメントから。あなたの$uriの部分では、同じURLに対してWordPressが再度検索されますが、今回はGETリクエストがあります。あなたのワードプレスがそれをどのように処理するのかは分かりませんが、発生するエラーはデバッグに役立たないでしょう。

これは本当に問題を回避しています。あなたが得るべきものは元の504です。したがって、私はあなたの代わりに再帰的なエラーページを有効にすると、以下の操作を行い示唆してリダイレクトします。

解決方法:GETをあなたのエラーページ

を取得するために、私はあなたがまだにも、あなたのerror.htmlを返すようにしたいと仮定しますPOSTリクエスト。そのためには、NGINXにPOSTを落とし、エラーをGETで処理して、静的ファイルを使用できるようにする必要があります。私がこれを実現させるために見つけた唯一の方法は、名前付きの場所(最初は@のもの)を使用しないで、代わりにinternalを使用することです。

ので、同じよう例えば、擬似パスとinternalディレクティブを含めるように@error_page場所を変更し、このオプションを使用するには、次の新しい場所を使用するために、error_pageディレクティブを変更し、その後

location /error_page { 
     internal; 
     root /usr/syno/share/nginx; 
     rewrite (.*) /error.html break; 
    } 

error_page 403 404 500 502 503 504 /error_page; 

資源:あなたは、これが解決し得ることができ

+0

私は上記のgotchasを要約しました。このブログ記事のerror_page指示文に遭遇した人もいますが、将来誰か(おそらく私の将来)に役立つでしょう。http://muratknecht.de/tech/why-nginx-returns-405 -post-504-gateway-timeout-gotchas-error-page / – mknecht

関連する問題