Назад | Перейти на главную страницу

NGINX на OSX - работает ужасно медленно

Я пытался запустить NGINX на моем компьютере с OSX 10.7 Lion. У меня он работает, однако простые html-страницы каждые несколько загружаются долго; например:

<html> 
  <body>
    test
  </body> 
</html>

То же самое происходит с php:

<?php
  echo('hi');
?>

Если я нажимаю «Обновить», кажется, что он почти перестраивает всю страницу, прежде чем отрендерить и создать какой-то объект. Просто мучительно медленно ..

Это кажется наиболее частым, если я немного кодирую, а затем возвращаюсь, чтобы обновить страницу. (10-20 + секунд, затем возврат и обновление страницы занимает хорошие 4-6 секунд). Кажется, что после простоя требуется время, чтобы снова проснуться.

Я выдергиваю волосы, пытаясь понять, что происходит, надеюсь, кто-нибудь сможет пролить свет на это для меня.

Конфигурация системы:

Версия Nginx: 1.0.11

Версия PHP: 5.3.9

Я установил это из чистого формата OSX (который, как я думал, изначально был моей ошибкой, к сожалению, это не так).

Обновить

После обновления моего файла error_log, чтобы он содержал отладку по предложению Fox в комментариях, я теперь вижу, что в моем error_log появляется следующее сообщение:

2012/01/23 11:57:02 [info] 88015#0: *26 client closed prematurely connection 
while reading client request line, client: 127.0.0.1, server: sandbox.local

Обновление два

После проверки с помощью Chrome я обнаружил, что разрешение DNS занимает немного времени?

Обновление три - РЕШЕНО

После обновления 2 исправлен файл / etc / hosts для использования:

127.0.0.1 sandbox.local

И

:: 1 sandbox.local

Благодаря @thinice я смог пройти через strace и заметить, что все запросы, нацеленные на localhost напрямую из telnet, всегда выполнялись мгновенно; который затем вызвал проверку DNS и, наконец, привел к его обнаружению!

OSX / etc / hosts Ошибки

Я не уверен, что это ошибка nginx; когда я ранее устанавливал appache, он работал нормально.

============

Вот мои файлы конфигурации:

Конфигурация NGINX

user petrogad staff;
worker_processes  2;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

pid        /usr/local/ngnix/var/run/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include mime.types;

    default_type text/plain;
    server_tokens off;

    sendfile on;
    tcp_nopush on;
    keepalive_timeout 10;

   # gzip on;
   # gzip_comp_level 2;
   # gzip_proxied any;
   # gzip_types text/plain text/css text/javascript application/json application/x-javascript text/xml application/xml application/xml+rss;

    index index.html index.php;
    include /usr/local/ngnix/conf/sites-enabled/*.link;
}

Конфигурация сервера

{
    listen 80;
    server_name sandbox.local;
    root /www/sandbox;

    access_log /Users/petrogad/logs/ngnix-sites/sandbox_log.txt;
    error_log /Users/petrogad/logs/ngnix-sites/sandbox_log.txt;

    location /
    {
        # First attempt to serve request as file, then
        # as directory, then fall back to index.html
        try_files $uri $uri/ /index.html;
        autoindex on;
    }

    include /usr/local/ngnix/conf/php.conf;
}

PHP Включить

fastcgi_intercept_errors on;

location ~ \.php$
{
    #fastcgi_intercept_errors on;
    fastcgi_param PATH_INFO         $fastcgi_path_info;
    fastcgi_param PATH_TRANSLATED   $document_root$fastcgi_path_info;
    fastcgi_param QUERY_STRING      $query_string;
    fastcgi_param REQUEST_METHOD    $request_method;
    fastcgi_param CONTENT_TYPE      $content_type;
    fastcgi_param CONTENT_LENGTH    $content_length;
    fastcgi_param SCRIPT_NAME       $fastcgi_script_name;
    fastcgi_param SCRIPT_FILENAME   $request_filename;
    fastcgi_param REQUEST_URI       $request_uri;
    fastcgi_param DOCUMENT_URI      $document_uri;
    fastcgi_param DOCUMENT_ROOT     $document_root;
    fastcgi_param SERVER_PROTOCOL   $server_protocol;
    fastcgi_param GATEWAY_INTERFACE CGI/1.1;
    fastcgi_param SERVER_SOFTWARE   nginx;
    fastcgi_param REMOTE_ADDR       $remote_addr;
    fastcgi_param REMOTE_PORT       $remote_port;
    fastcgi_param SERVER_ADDR       $server_addr;
    fastcgi_param SERVER_PORT       $server_port;
    fastcgi_param SERVER_NAME       $server_name;

    fastcgi_read_timeout 60; # Set fairly high for debugging

    fastcgi_pass  127.0.0.1:9001; # Non-default port
    fastcgi_index index.php;
}

Быстрая конфигурация CGI

fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
fastcgi_param  QUERY_STRING       $query_string;
fastcgi_param  REQUEST_METHOD     $request_method;
fastcgi_param  CONTENT_TYPE       $content_type;
fastcgi_param  CONTENT_LENGTH     $content_length;

fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
fastcgi_param  REQUEST_URI        $request_uri;
fastcgi_param  DOCUMENT_URI       $document_uri;
fastcgi_param  DOCUMENT_ROOT      $document_root;
fastcgi_param  SERVER_PROTOCOL    $server_protocol;

fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;

fastcgi_param  REMOTE_ADDR        $remote_addr;
fastcgi_param  REMOTE_PORT        $remote_port;
fastcgi_param  SERVER_ADDR        $server_addr;
fastcgi_param  SERVER_PORT        $server_port;
fastcgi_param  SERVER_NAME        $server_name;

# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param  REDIRECT_STATUS    200;

Конфигурация PHP-FPM

[global]
pid = /usr/local/php-5.3.9/var/run/php-fpm.pid
daemonize = yes

[www]
listen = 127.0.0.1:9001
user = petrogad
group = staff
pm = dynamic
pm.max_children = 10
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 10
pm.max_requests = 500

Попытка простого решения со следующей конфигурацией nginx, такой же медленный результат, как указано выше:

user petrogad staff;
worker_processes  2;


pid        /usr/local/ngnix/var/run/nginx.pid;

events {
    worker_connections  1024;
}


http {

    include mime.types;

    default_type text/plain;
    server_tokens off;

    sendfile on;
    tcp_nopush off;
    keepalive_timeout 0;

    index index.html;

  server
  {
    listen 80;
    server_name sandbox.local;
    root /www/sandbox;

    access_log /Users/petrogad/logs/ngnix-sites/sandbox_log.txt;
    error_log /Users/petrogad/logs/ngnix-sites/sandbox_log.txt;

    location /
    {
        autoindex on;
    }

  }



}

Начните с удаления всех ненужных параметров конфигурации.

Получите настройку до конфигурации по умолчанию "Я обслуживаю только файлы HTML". Удалите оптимизацию.

Медленно начните добавлять аспекты по несколько, перезапустите стек и протестируйте.

Если вы амбициозны, можете бежать strace на одном серверном процессе, чтобы получить тайминги. Взгляните на это для ускоренного курса.