VMware Images: |
Installing Nginx With PHP5 (And PHP-FPM) And MySQL Support On Scientific Linux 6.3 - Page 2
5 Installing PHP5We can make PHP5 work in nginx through PHP-FPM (PHP-FPM (FastCGI Process Manager) is an alternative PHP FastCGI implementation with some additional features useful for sites of any size, especially busier sites). We can install php-fpm together with php-cli and some PHP5 modules like php-mysql which you need if you want to use MySQL from your PHP scripts as follows: yum install php-fpm php-cli php-mysql php-gd php-imap php-ldap php-odbc php-pear php-xml php-xmlrpc php-magickwand php-magpierss php-mbstring php-mcrypt php-mssql php-shout php-snmp php-soap php-tidy APC is a free and open PHP opcode cacher for caching and optimizing PHP intermediate code. It's similar to other PHP opcode cachers, such as eAccelerator and Xcache. It is strongly recommended to have one of these installed to speed up your PHP page. APC can be installed as follows: yum install php-pecl-apc Then open /etc/php.ini and set cgi.fix_pathinfo=0: vi /etc/php.ini
(Please read http://wiki.nginx.org/Pitfalls to find out why you should do this.) In addition to that, in order to avoid errors like [08-Aug-2011 18:07:08] PHP Warning: phpinfo(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'Europe/Berlin' for 'CEST/2.0/DST' instead in /usr/share/nginx/html/info.php on line 2 ... in /var/log/php-fpm/www-error.log when you call a PHP script in your browser, you should set date.timezone in /etc/php.ini:
You can find out the correct timezone for your system by running: cat /etc/sysconfig/clock [root@server1 nginx]# cat /etc/sysconfig/clock Next create the system startup links for php-fpm and start it: chkconfig --levels 235 php-fpm on PHP-FPM is a daemon process (with the init script /etc/init.d/php-fpm) that runs a FastCGI server on port 9000.
6 Configuring nginxThe nginx configuration is in /etc/nginx/nginx.conf which we open now: vi /etc/nginx/nginx.conf The configuration is easy to understand (you can learn more about it here: http://wiki.codemongers.com/NginxFullExample and here: http://wiki.codemongers.com/NginxFullExample2) First (this is optional) you can increase the number of worker processes and set the keepalive_timeout to a reasonable value:
The virtual hosts are defined in server {} containers in the /etc/nginx/conf.d directory. Let's modify the default vhost (in /etc/nginx/conf.d/default.conf) as follows: vi /etc/nginx/conf.d/default.conf
server_name _; makes this a default catchall vhost (of course, you can as well specify a hostname here like www.example.com). In the location / part, I've added index.php to the index line. root /usr/share/nginx/html; means that the document root is the directory /usr/share/nginx/html. The important part for PHP is the location ~ \.php$ {} stanza. Uncomment it to enable it. Change the root line to the web site's document root (e.g. root /usr/share/nginx/html;). Please note that I've added the line try_files $uri =404; to prevent zero-day exploits (see http://wiki.nginx.org/Pitfalls#Passing_Uncontrolled_Requests_to_PHP and http://forum.nginx.org/read.php?2,88845,page=3). Please make sure that you change the fastcgi_param line to fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; because otherwise the PHP interpreter won't find the PHP script that you call in your browser ($document_root translates to /usr/share/nginx/html because that's what we have set as our document root). PHP-FPM is listening on port 9000 on 127.0.0.1 by default, therefore we tell nginx to connect to 127.0.0.1:9000 with the line fastcgi_pass 127.0.0.1:9000;. It is also possible to make PHP-FPM use a Unix socket - I will describe this in chapter 7. Now save the file and reload nginx: /etc/init.d/nginx reload Now create the following PHP file in the document root /usr/share/nginx/html... vi /usr/share/nginx/html/info.php
Now we call that file in a browser (e.g. http://192.168.0.100/info.php): As you see, PHP5 is working, and it's working through FPM/FastCGI, as shown in the Server API line. If you scroll further down, you will see all modules that are already enabled in PHP5, including the MySQL module:
7 Making PHP-FPM Use A Unix SocketBy default PHP-FPM is listening on port 9000 on 127.0.0.1. It is also possible to make PHP-FPM use a Unix socket which avoids the TCP overhead. To do this, open /etc/php-fpm.d/www.conf... vi /etc/php-fpm.d/www.conf ... and make the listen line look as follows:
Then reload PHP-FPM: /etc/init.d/php-fpm reload Next go through your nginx configuration and all your vhosts and change the line fastcgi_pass 127.0.0.1:9000; to fastcgi_pass unix:/tmp/php5-fpm.sock;, e.g. like this: vi /etc/nginx/conf.d/default.conf
Finally reload nginx: /etc/init.d/nginx reload
8 Links
About The Author![]() Falko Timme is the owner of
|






Recent comments
1 day 8 hours ago
1 day 13 hours ago
1 day 18 hours ago
1 day 20 hours ago
2 days 10 hours ago
2 days 10 hours ago
2 days 15 hours ago
2 days 22 hours ago
2 days 22 hours ago
3 days 4 min ago