Ich habe versucht, NGINX auf meinem OSX 10.7 Lion-Computer zum Laufen zu bringen. Ich habe es ausgeführt, aber einfache HTML-Seiten alle paar brauchen lange Zeit zum Laden; zum Beispiel:
<html>
<body>
test
</body>
</html>
Gleiches passiert mit PHP:
<?php
echo('hi');
?>
Wenn ich auf Aktualisieren drücke, scheint es, als würde fast die gesamte Seite neu erstellt, bevor sie gerendert und eine Art Objekt erstellt wird. Nur schmerzhaft langsam ..
Dies scheint am häufigsten zu sein, wenn ich etwas codiere und dann zurück gehe, um eine Seite zu aktualisieren. (10-20 + Sekunden, dann geht das Zurückgehen und Aktualisieren einer Seite gut 4-6 Sekunden). Es scheint fast so, als ob es nach dem Leerlauf eine Weile dauert, bis es wieder aufwacht.
Ich ziehe mir die Haare aus und versuche zu verstehen, was los ist. Hoffentlich kann mir jemand etwas Licht ins Dunkel bringen.
Systemkonfiguration:
Betriebssystem: OSX 10.7.2
Prozessor: 2 x 2,66 GHz Dual-Core Intel Xeon
Speicher: 8 GB 667 MHz
Nginx-Version: 1.0.11
PHP-Version: 5.3.9
Ich habe dies von einem sauberen OSX-Format installiert (was ich anfangs für meinen Fehler hielt, leider nicht).
Aktualisieren
Nachdem ich meine error_log-Datei so aktualisiert habe, dass sie das Debugging gemäß Fox 'Vorschlag in Kommentaren enthält, wird in meinem error_log die folgende Meldung angezeigt:
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
Update Zwei
Bei der Inspektion mit Chrom stellte ich fest, dass die DNS-Auflösung anscheinend etwas dauert.
Update Drei - Gelöst
Nach dem Update Zwei feste / etc / hosts-Dateien zur Verwendung:
127.0.0.1 sandbox.local
UND
:: 1 sandbox.local
Dank @thinice konnte ich feststellen, dass alle Anfragen, die direkt von Telnet auf localhost abzielen, immer sofort eingingen. was dann zur DNS-Überprüfung führte und schließlich dazu führte, dies zu finden!
Ich bin nicht sicher, ob dies ein Nginx-Fehler ist. Als ich zuvor Appache installiert hatte, funktionierte dies einwandfrei.
============
Hier sind meine Konfigurationsdateien:
NGINX Konfig
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;
}
Serverkonfiguration
{
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 einschließen
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;
}
Schnelle CGI-Konfiguration
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-Konfiguration
[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
Versucht Einfache Lösung mit der folgenden Nginx-Konfiguration, dasselbe langsame Ergebnis wie oben:
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;
}
}
}
resolver_timeout 1s;
etwas? Auch die Einstellungerror_log /Users/petrogad/logs/ngnix-sites/sandbox_log.txt debug;
könnte einen Einblick bringen ...Antworten:
Entfernen Sie zunächst alle unnötigen Konfigurationsoptionen.
Holen Sie sich das Setup auf eine Standardkonfiguration "Ich bediene nur HTML-Dateien". Optimierungen entfernen.
Fügen Sie langsam nach und nach Aspekte hinzu, starten Sie Ihren Stack neu und testen Sie.
Wenn Sie sich ehrgeizig fühlen, können Sie
strace
auf einem einzelnen Serverprozess laufen , um Timings zu erhalten. Schauen Sie sich das für einen Crashkurs an .quelle