本日、久しぶりにPHPのWebアプリを別サーバーに移行したのですが、nginxの設定でかなり手間取りましたのでちょっと記録しておきます。
nginxの設定
インストール
yumでいきなりいければ一番簡単なのですが、登録していないとそもそも動かないので、リポジトリへの登録が必要になります。
その後、yumでインストールし、バージョン確認すればOKです。
1 2 3 4 5 6 7 8 9 10 11 |
//リポジトリ登録 #centos6 rpm -ivh http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm #centos7 rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm //yumインスト‐ル yum -y install nginx //バージョン確認 nginx -v nginx version: nginx/バージョン |
yumで入れていればserviceコマンドでいけますので
service nginx start で起動しておきましょう。
この時点でhttp://ipアドレスでアクセスできるはず・・なのですが、ポートが開いておらずアクセスできないということがおこりました。
ポート開放
nginxが起動しているのに外部からアクセスできない場合ポートが閉じている可能性があります。
その場合、下記の処理でポートを開放しましょう。
1 2 3 4 5 6 7 8 |
//iptablesで解放します。 vim /etc/sysconfig/iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT を追加 //ちなみに20番、21番はFTP、22番はSSH、80番はHTTPポートです。 //SSH接続で外部から操作している場合、22番の開放を忘れると、最悪一切の通信が不可能になってしまうので注意。 //再起動 /etc/init.d/iptables restart |
/etc/init.d/iptableがないときは下記のコマンドを実行
1 2 |
iptables -A INPUT -p tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp --sport 80 -j ACCEPT |
この時点でアクセスをして画面が表示されればOKです。
php-fpmの設定
なお、PHPを稼働させる場合はphp-fpmも入れておきましょう。
これは実際にPHPが稼働するのはphp-fpmの中だからです
yumで入ります。
1 2 |
yum -y install php-fpm --enablerepo=remi-php56,remi,epel service php-fpm start |
【俺メモ】CentOS6系にnginx,php5.6,php-fpm をインストール&socketでのnginx連携
AmazonLinuxにnginx+PHP5.6+PHP-fpm+PHP-redis環境を作る
設定ファイルの修正
nginxの設定ファイル( /etc/nginx/nginx.conf )は下記のようになっています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
user nginx; worker_processes 1; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/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 /var/log/nginx/access.log main; sendfile on; #tcp_nopush on; keepalive_timeout 65; #gzip on; include /etc/nginx/conf.d/*.conf; } |
一般的にはこのファイル自体はそのままにしておき、下層にそれぞれのホストの設定ファイルを置きます。
1 |
include /etc/nginx/conf.d/*.conf; |
となっている部分がありますが、ようするにconf.d以下の設定ファイルを読み込みます。
conf.d直下にあるdefault.confファイルをコピーしましょう。
default.confは拡張子をつぶして使えなくしておいたほうがよいかと思います。
sample.confとして例を以下に示します。
ドメインをhttp://hoge.com
ルートディレクトリを/var/www/html/hogeとします。
sample.conf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
server { listen 80; server_name hoge.com; #charset koi8-r; #access_log /var/log/nginx/log/host.access.log main; access_log /var/log/nginx/hoge.access.log; error_log /var/log/nginx/hoge.error.log warn; location / { root /var/www/html/hoge; index index.html index.htm; } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } # proxy the PHP scripts to Apache listening on 127.0.0.1:80 # #location ~ \.php$ { # proxy_pass http://127.0.0.1; #} # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # location ~ \.php$ { root /var/www/html/hoge; //basic認証を入れるときは下記の2行が必要です。逆にいうと認証がいらなければいりません。 auth_basic "QS Beta TEST"; auth_basic_user_file "/var/www/html/sample/.htpasswd"; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /var/www/html/hoge$fastcgi_script_name; include fastcgi_params; } # deny access to .htaccess files, if Apache's document root # concurs with nginx's one # #location ~ /\.ht { # deny all; #} } |
途中
1 |
FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream |
というエラーが出た場合、
1 |
fastcgi_param SCRIPT_FILENAME /var/www/html/hoge$fastcgi_script_name; |
のルートディレクトリの設定が違っている可能性が高いです。
デバッグをしながらパラメータにログに出力してみましょう。
修正したらservice nginx restartで再起動してOKがでればOK
ブラウザでアクセスしてみましょう。
ちなみに下記の情報を参考にしました。
[…] nginxの設定 […]
[…] http://skill-up-engineering.com/?p=367 […]