C3rd
Centos 6.2: PHP, MySQL and Nginx
Posted: 21 Jun 2012, 15:53pm - ThursdayI've been curious about the word nginx. A lot of posting about nginx. So I do a little research and found out its a HTTP server. So I tried my own research and experiment which all sample configuration can be found at nginx.org. For my experiment, I used Centos 6.2, PHP, MySQL and the Nginx. Here's you will do it to setup Web Server using Nginx; Download first the EPEL for Centos 6 (http://ftp.jaist.ac.jp/pub/Linux/Fedora/epel/6/i386/repoview/epel-release.html or [download id="31"]) -- purpose for this is so you can install the per-requesites of Nginx like spawn-fcgi.
[root@server ~]# wget http://ftp.jaist.ac.jp/pub/Linux/Fedora/epel/6/i386/epel-release-6-7.noarch.rpm [root@server ~]# rpm -ivh epel-release-6-7.noarch.rpm [root@server nginx]# yum repolist Loaded plugins: fastestmirror, protectbase, security Loading mirror speeds from cached hostfile * base: centos.ipserverone.com * epel: ftp.cuhk.edu.hk * extras: centos.ipserverone.com * updates: centos.ipserverone.com 0 packages excluded due to repository protections repo id repo name status base CentOS-6 - Base 6,294 epel Extra Packages for Enterprise Linux 6 - x86_64 7,561 extras CentOS-6 - Extras 6 nginx nginx repo 23 updates CentOS-6 - Updates 1,147 repolist: 15,031Then install nginx.
[root@server ~]# yum -y install nginxInstall PHP, MySQL and other packages.
[root@server ~]# yum -y install php-pear-Net-Socket php-pear php-common php-gd php-devel php php-mbstring php-pear-Mail php-cli php-imap php-snmp php-pdo php-xml php-pear-Auth-SASL php-ldap php-pear-Net-SMTP php-mysqlInstall spawn-fgi
[root@server ~]# yum -y install spawn-fcgiDownload and setup the spawn-fcgi to init.d ([download id="32"])
[root@server ~]# wget http://bash.cyberciti.biz/dl/419.sh.zip [root@server ~]# unzip 419.sh.zip [root@server ~]# mv 419.sh /etc/init.d/php_cgi [root@server ~]# chmod +x /etc/init.d/php_cgiStart PHP app server and check if running
[root@server ~]# /etc/init.d/php_cgi start [root@server ~]# netstat -tulpn | grep :9000 tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 1843/php-cgiConfigure nginx.conf for PHP based webserver for Wordpress, Drupal & Joomla (Download: [download id="33"]).
[root@server nginx]# cat nginx.conf 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; server { listen 80 default_server; server_name .nginx.ph; access_log /var/log/nginx/nginx.ph_access_log; error_log /var/log/nginx/nginx.ph_error_log; index index.html index.php index.htm; root /home/camilord/public_html; location / { # if you're just using wordpress and don't want extra rewrites # then replace the word @rewrites with /index.php try_files $uri $uri/ @rewrites; } location @rewrites { # Can put some of your own rewrite rules in here # for example rewrite ^/~(.*)/(.*)/? /users/$1/$2 last; # If nothing matches we'll just send it to /index.php rewrite ^ /index.php last; } # This block will catch static file requests, such as images, css, js # The ?: prefix is a 'non-capturing' mark, meaning we do not require # the pattern to be captured into $1 which should help improve performance location ~* \.(?:ico|css|js|gif|jpe?g|png)$ { # Some basic cache-control for static files to be sent to the browser expires max; add_header Pragma public; add_header Cache-Control "public, must-revalidate, proxy-revalidate"; } # remove the robots line if you want to use wordpress' virtual robots.txt location = /robots.txt { access_log off; log_not_found off; } location = /favicon.ico { access_log off; log_not_found off; } # this prevents hidden files (beginning with a period) from being served location ~ /\. { access_log off; log_not_found off; deny all; } location ~ \.php { 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 $document_root$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; 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_pass 127.0.0.1:9000; } #location ~ \.php$ #{ # root html; # fastcgi_pass 127.0.0.1:9000; # fastcgi_index index.php; # fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html$fastcgi_script_name; # include fastcgi_params; #} } }Restart Nginx
[root@server ~]# service nginx restartI think that's it.. it should be working because its working on my CentOS linux box. :) Reference:
- http://www.cyberciti.biz/faq/rhel-fedora-install-configure-nginx-php5/
- http://www.cyberciti.biz/faq/rhel-fedora-centos-linux-enable-epel-repo/
- http://www.thegeekstuff.com/2012/06/enable-epel-repository/
- http://ftp.jaist.ac.jp/pub/Linux/Fedora/epel/6/i386/repoview/epel-release.html
- http://wiki.nginx.org/ServerBlockExample
- http://kbeezie.com/view/nginx-configuration-examples/