Difference between revisions of "Nginx Installation and Configuration"
m (moved Nginx to Help:Nginx Installation and Configuration: more suitable namespace and title) |
m (+Cheat sheet) |
||
Line 9: | Line 9: | ||
* nginx behaves differently with respect to output flushing than apache, perhaps a solution here: http://www.justincarmony.com/blog/2011/01/24/php-nginx-and-output-flushing/ | * nginx behaves differently with respect to output flushing than apache, perhaps a solution here: http://www.justincarmony.com/blog/2011/01/24/php-nginx-and-output-flushing/ | ||
− | + | == Installation == | |
sudo nano /etc/apt/sources.list | sudo nano /etc/apt/sources.list | ||
Line 64: | Line 64: | ||
STOP: | STOP: | ||
sudo /etc/init.d/php5-fpm stop; sudo /etc/init.d/nginx stop | sudo /etc/init.d/php5-fpm stop; sudo /etc/init.d/nginx stop | ||
+ | |||
+ | == Configuration: Locations and Rewrites == | ||
+ | |||
+ | See for instance <code>/etc/nginx/sites-availabel/default</code> | ||
+ | * http://wiki.nginx.org/HttpRewriteModule | ||
+ | * http://wiki.nginx.org/HttpCoreModule | ||
+ | |||
+ | === Cheat sheet ==== | ||
+ | |||
+ | '''Location''' see http://wiki.nginx.org/NginxHttpCoreModule#location | ||
+ | '''Syntax:''' | ||
+ | {{Nginx docurl|location}} [ = | ^~ | ~ | ~* ] uri { ... } | ||
+ | {{Nginx docurl|location}} { } @ name { … } | ||
+ | '''Check order:''' | ||
+ | {{Nginx docurl|location}} = string-uri { … } <s>further searching</s> | ||
+ | {{Nginx docurl|location}} ^~ string-uri { … } <s>further searching</s> | ||
+ | {{Nginx docurl|location}} ~ regex-uri { ''case sensiteve'' } ┬ → ''in order of appearence'' | ||
+ | {{Nginx docurl|location}} ~* regex-uri { ''case '''in'''sensiteve'' } ┘ | ||
+ | {{Nginx docurl|location}} string-uri { … } | ||
+ | |||
+ | The order in which location directives are checked is as follows: | ||
+ | |||
+ | (1) Directives with the "=" prefix that match the query exactly (literal string). If found, searching stops. | ||
+ | |||
+ | (2) All "^~" prefixed locations with conventional strings. If it matches, searching stops. | ||
+ | |||
+ | (3) Regular expressions, in the order they are defined in the configuration file. | ||
+ | |||
+ | (4) All remaining directives with conventional strings. Most specific (=most detailed) are executed (line 2): | ||
+ | <syntaxhighlight lang="text" line="true" style="margin-left:1.5em;"> | ||
+ | location /w/ { … } | ||
+ | location /w/images/details/ { … } | ||
+ | location /w/images/a/ { … } | ||
+ | </syntaxhighlight> |
Revision as of 15:30, 14 January 2013
Based on
- http://www.webhostingtalk.com/showthread.php?t=1025286 = for debian 6
- http://www.howtoforge.com/installing-nginx-with-php5-and-mysql-support-on-debian-lenny
- http://www.howtoforge.com/installing-php-5.3-nginx-and-php-fpm-on-ubuntu-debian
- Very helpful for mediawiki: http://blog.bigdinosaur.org/mediawiki-on-nginx/
- Interesting and authoritative, but covers only single mediawiki in root, not clear how to modify: http://wiki.nginx.org/MediaWiki
- Mediawiki, very useful mediawiki-config-generator: http://shorturls.redwerks.org/
- Highly recommended: http://www.nginx-discovery.com/2011/04/day-45-location-regexp-or-no-regexp.html
- nginx behaves differently with respect to output flushing than apache, perhaps a solution here: http://www.justincarmony.com/blog/2011/01/24/php-nginx-and-output-flushing/
Installation
sudo nano /etc/apt/sources.list
add lines:
# necessary only for php-fpm, the php version for nginx: deb http://packages.dotdeb.org stable all
Add the GnuPG key to your distribution:
wget http://www.dotdeb.org/dotdeb.gpg cat dotdeb.gpg | sudo apt-key add - rm dotdeb.gpg
Install nginx, fpm, new php:
sudo apt-get update sudo apt-get install php5 php5-fpm php-pear php5-common php5-mcrypt php5-mysql php5-cli php5-gd php5-curl php5-dev php5-imagick php5-imap php5-intl php5-pspell php5-recode php5-snmp php5-sqlite php5-tidy php5-xmlrpc sudo apt-get install libapache2-mod-php5 php5-apc sudo apt-get install nginx
Apply "cgi.fix_pathinfo = 0;" in php.ini (security, avoid loading undesired php in a subfolder).
Change php-fpm configuration with:
sudo nano /etc/php5/fpm/php-fpm.conf
and
sudo nano /etc/php5/fpm/pool.d/www.conf
setting:
pm.max_children = 25 pm.start_servers = 5 pm.min_spare_servers = 5 pm.max_spare_servers = 10 pm.max_requests = 1500 request_terminate_timeout = 450s
Change nginx configuration with:
sudo nano /etc/nginx/nginx.conf
adding various settings.
edit the default vhost config:
cd /etc/nginx/sites-enabled; nano /etc/nginx/sites-available/default
(To create symlinks for further vhost files like "www.example.com" under sites-enabled:
ln -s /etc/nginx/sites-available/www.example.com /etc/nginx/sites-enabled/www.example.com
)
- NOTE: One failure we experienced was that we tested php with the phpinfo.php file, which, however, uses short php open tags. The default FPM-based php.ini in /etc/php5/fpm has short_open_tag = Off however. This initially and wrongly lead us to the conclusion that php was not working.
- NOTE: for testing we used port 8880, which goes through bgbm (but not jki) firewalls.
Restart apache, nginx and fpm (we still use apache for certain uses):
sudo /usr/sbin/apache2ctl -k graceful && sudo service nginx restart && sudo service php5-fpm restart
STOP:
sudo /etc/init.d/php5-fpm stop; sudo /etc/init.d/nginx stop
Configuration: Locations and Rewrites
See for instance /etc/nginx/sites-availabel/default
Cheat sheet =
Location see http://wiki.nginx.org/NginxHttpCoreModule#location
Syntax: location [ = | ^~ | ~ | ~* ] uri { ... } location { } @ name { … } Check order: location = string-uri { … }further searchinglocation ^~ string-uri { … }further searchinglocation ~ regex-uri { case sensiteve } ┬ → in order of appearence location ~* regex-uri { case insensiteve } ┘ location string-uri { … }
The order in which location directives are checked is as follows:
(1) Directives with the "=" prefix that match the query exactly (literal string). If found, searching stops.
(2) All "^~" prefixed locations with conventional strings. If it matches, searching stops.
(3) Regular expressions, in the order they are defined in the configuration file.
(4) All remaining directives with conventional strings. Most specific (=most detailed) are executed (line 2):
1 location /w/ { … }
2 location /w/images/details/ { … }
3 location /w/images/a/ { … }