2017-02-10 14 views
4

Я пытаюсь настроить сайт, используя синологию с php 5.6 и nginx. Веб-сайт - это WordPress и тема. При обработке демо-импорта у нас есть ошибка NGNX 405 (не разрешено).Nginx - 405 НЕ ДОПУСКАЕТСЯ - время ожидания fastcgi

Это своего рода разочарование, потому что мне нравится, когда все сделано правильно.

Я просмотрел файл 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 (вот почему мой фактический 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/02/10 18:14:07 [ошибка] 18555 # 18555: * 2563 вверх по течению истекло (110: Время ожидания подключения) при чтении заголовка ответа от вверх по течению, клиент: xxx.xxx.xxx.xxx, server: example.com, запрос: «POST /wp-admin/admin-ajax.php HTTP/1.1», вверх по течению: «fastcgi: // unix: /run/php-fpm/php56-fpm.sock», хост: «www.example.com», referrer: http://example.com/wp-admin/admin.php?page=laborator-demo-content-installer&install-pack=agency&

Если у вас есть какие-либо идеи, чтобы решить эту проблему ... потому что я изо всех сил, так как несколько недель теперь ... Большое спасибо заранее

+0

вы смогли получить это решить? Я испытываю такую ​​же проблему, и через неделю или около того поиска я оказался здесь ... – LukeP

+0

@ LukeP см. Мой ответ. Если это все равно не сработает, отправьте суть своих директив error_page, поскольку они являются ключевыми для этого. – mknecht

+0

@mknecht Спасибо. В конце концов я работал. Не помню, что это было, но это было специфично для моей среды. Я запускаю ResourceSpace DAM на NAS Synology, а config управляется Synology DSM, который заменит изменения конфигурации, которые я делал каждый раз, когда я перезапускал веб-сервер для их применения. – LukeP

ответ

3

ТЛ; др-Ваш WordPress слишком медленно , Перейдите в нижнюю часть, чтобы увидеть, как вы можете сделать NGINX верным вам код состояния 504 GATEWAY TIMEOUT.

Более длинная версия: у вас есть куча отдельных проблем, работающих вместе бесполезным способом.

1. WordPress, вышестоящий сервер, не реагирует достаточно быстро

Это занимает больше времени, чем за 4 минуты, поэтому вы видите в журналах с 110: Connection timed out. Решение для медленности - это ускорение WordPress. В качестве обходного пути вы можете дать ему больше времени для обработки запроса. Для этого увеличьте число в правиле fastcgi_read_timeout 240;. Обратите внимание, что тайм-аут задается в секундах, поэтому, если вы в порядке с ожиданием 10 минут, установите это значение 600.

Я бы посоветовал не увеличивать время ожидания. Вы должны действительно решить проблему с производительностью. Такие длинные запросы блокируют ресурсы в NGINX и WordPress, и поэтому позволяют вам быть DDoSed довольно легко, даже случайно сами.

Поскольку ваш восходящий поток занимает слишком много времени, NGINX ответит 504 GATEWAY TIMEOUT. Он не может, потому что ...

2. Запросы POST не может быть решен с помощью статических файлов

В вашем error_page месте, вы говорите NGINX использовать статические файлы для обработки запросов.Это нормально для GET или HEAD, но он не работает для POST, потому что он попросит NGINX перезаписать/создать файлы. NGINX не поддерживается и не поддерживается. (Просьба также не будет с помощью других модифицирующих глаголов, таких как PUT и DELETE, по той же причине.)

Обратите внимание, что вы используете именованный местоположение, @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, WordPress снова будет запрошен для того же URL-адреса, на этот раз с запросом GET. Не знаю, как ваш WordPress справляется с этим, но вероятность того, что это произойдет, не поможет вам отладить это.

Это действительно просто прыгает вокруг проблемы; то, что вы должны получить, это оригинал 504. Поэтому я предлагаю вам сделать следующее, вместо включения рекурсивной страницы ошибок перенаправляет:

Решения: Используйте GET, чтобы принести свои страницы ошибок

Я предполагаю, что вы все еще хотите, чтобы вернуть error.html даже на Запрос POST. Для этого вам нужно заставить NGINX отказаться от POST и обработать ошибку с помощью GET, чтобы можно было использовать статические файлы. Единственный способ, которым я нашел, чтобы это произошло, - не использовать именованное местоположение (те, что с @ в начале), но вместо этого - internal.

Чтобы использовать эту возможность, измените @error_page расположение, чтобы включить псевдо-путь и директивы internal, например, как так:

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

Затем измените error_page директиву, чтобы использовать новое местоположение:

error_page 403 404 500 502 503 504 /error_page; 

Ресурсы:

+0

Я обобщил gotchas выше, и другие, с которыми я столкнулся с директивой error_page в этом сообщении в блоге, надеюсь, что это полезно кому-то (возможно, мне в будущем): http://muratknecht.de/tech/why-nginx-returns-405 -post-504-шлюз-Тайм-аут подводных камней ошибок страниц / – mknecht

 Смежные вопросы

  • Нет связанных вопросов^_^