Ubuntu 12.04サーバーとnginx 1.2.7をインストールし、サイト対応からdefault
を削除し、sites-available
とsites-enabled
にシンボリックリンクを追加しました。その後、nginxを再起動しました。
問題:ただし、URLにアクセスしてもサイトはロードされません。 netstat -nlp | grep nginx
とnetstat -nlp | grep 80
はどちらも結果を返しません! lsof -i :80
も何も返しません。別のサーバーからのDig
は、正しいIPアドレスを返すため、DNSの問題ではありません。 Apacheに接続できましたが、現在サービスを停止しています。 nginxログにも何も表示されません。
この問題のトラブルシューティング方法を教えてください。
/ etc/nginx/site-available/mysite.com
server {
listen 80;
server_name www.mysite.com mysite.com *.mysite.com;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
root /var/www/mysite/public;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$args ;
}
location ~ \.php$ {
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_read_timeout 300;
}
}
私はこれと同じ問題を抱えていました。解決策は、siteconfファイルを正しくシンボリックリンクしていなかったことです。 vim /etc/nginx/sites-enabled/mysite.com
を実行してみてください—それに到達できますか? 「許可が拒否されました」と表示されていました。
実行されない場合:
rm /etc/nginx/sites-enabled/mysite.com
ln -s /etc/nginx/sites-available/mysite.com /etc/nginx/sites-enabled/mysite.com
ログが問題に関して沈黙している場合、サイト対応ディレクトリを含めていない可能性があります。サイトがロードされていることを通知する簡単な方法の1つは、サーバーブロック内のエラー/アクセスログのパスを一意のパスに設定し、nginxをリロードして、ファイルが作成されているかどうかを確認することです。
/etc/nginx/nginx.confのhttpコンテキスト内に次のincludeディレクティブが存在することを確認してください。
http {
...
include /etc/nginx/sites-enabled/*;
}
同じ問題にぶつかりました。HTTPで接続するとFailed to load resource: net::ERR_CONNECTION_REFUSED
エラーが発生しましたが、HTTPSでは問題ありません。 netstat -tulpn
を実行し、nginxがIPv4のポート80にバインドしていないことを確認しました。ここで説明されているすべてを完了しました。何かであることが判明veryバカ:
sites-available
を含むdefault_server
ファイルが実際に有効になっていることを確認してください。
これが他のいくつかの貧しい馬鹿をしばらくそこに救うことを願っています。
私は、次の手順でnginxをデバッグするアプローチに役立つことがわかりました:
1 ... nginxが実行されていることを確認します。
ps aux | grep nginx
2 ...問題のポートにすでにバインドされているプロセスを確認します。
lsof -n -i:80
... nginxがリロードされていることを確認してください。
Sudo nginx -t
Sudo nginx -s reload
Macでは、
brew services restart nginx
はnot nginxをリロードするのに十分です。
4 ...単純な応答を手動で作成して、ロケーションパスが混乱しないようにしてください。これは、proxy_pass
を使用して実行中の他のアプリにリクエストを転送しているときに問題が発生した場合に特に役立ちます。
location / {
add_header Content-Type text/html;
return 200 'Here I am!';
}
おそらくnginxをポート80に2回バインドしています。それはあなたの完全な設定ファイルですか?ポート80をリッスンする別のステートメントはありませんか?
;
の前の行の/etc/nginx/nginx.conf
にセミコロンinclude /etc/nginx/servers-enabled/*;
がないと、この命令を無視でき、nginx -t
チェックは成功します。
したがって、/etc/nginx/nginx.conf
のすべての命令がセミコロン;
で終了していることを確認してください。
Nginxバイナリが本当に存在するかどうかを確認しましたか?確認してください
#whereis nginx
バイナリパスを出力し、/ etc/init.d/nginxのinitスクリプトでこのパスを確認します。例えば.
DAEMON=/usr/sbin/nginx
(私の初期スクリプトで「test -x $ DAEMON || exit 0」が呼び出され、いずれの場合もこのスクリプトは何も返しませんでした-バイナリは完全に欠落していました)
私の場合、これらのネットワークコマンドの出力は、nginxがポート80に正しくバインドされていることを示していますが、nmap
を使用してポートに外部からアクセスしたり表示したりできませんでした。
ファイアウォールを疑ったが、マシン上の古いiptables
ルールがそれらのポートからトラフィックをリダイレクトし、nginxと競合していたことが判明した。 Sudo iptables-save
を使用して、現在適用可能なすべてのルールを表示します。