事先声明,我用的是http://nginxcn.com/站BBS里面发布的NPMserver5.0,这个套件已经快有一年没更新了,所以不是最新的nginx,php,和mysql,但是也没落后多久。
首先,在上述网址找到下载地址,以前有个安装过程,今天我找到的是直接解压缩,建议能“安装”的就安装,其实就是解压一下,但是这个过程中,它会把你的NPMserver的路径写到各个配置文件里面去,
假如你下的是压缩版,那么需要到以下地方自行把NPMserver的安装目录改成你自己的
/config.ini, /config.xml, /MySQL5.1/my.ini, /nginx/vhost.conf, php/php.ini
比较麻烦是吧,有全文搜索工具的,可以直接在目录里面查找。这是准备工作,保证错误不要出在路径上,这可是低级的无意义错误。
路径改好后,php.ini基本上不要做什么改动,除非你要装Xdebug给netbean用,那么就像我之前这篇文章一样进行设置,不谈。
主要配置nginx,nginx的配置不熟的人是会非常头痛的,NPMserver有个好处,他把配置文件给分成了一个服务器配置文档(nginx.conf)和一个虚拟主机配置文档(vhost.conf),这样你分开设置,非常方便
其中虚拟主机配置方面,这个软件还提供了ini,xml以及客户端的方式让你来填写,很不错,但是我没时间测那么多,直接是在配置文件里面写的,下面是一些需要注意的地方
1,nginx.conf基本上你不要去动它,默认配置基本上可以跑很多网站了,你要去动的话,先了解清楚应该怎么改。
2,下面这一段会是默认在vhost.conf里面的
server { listen 80; server_name nginx.a; location / { root I:/NPMserv/www; index index.html index.htm index.php default.php; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } location ~ .*\.php?$ { root D:/NPMserv/www; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME I:/NPMserv/www$fastcgi_script_name; include fastcgi_params; } }
上一篇文章我们给apache配置了虚拟路径,现在我们把这个虚拟路径也配到nginx里面去:
server { listen 80; server_name www.dxpie.com event.dxpie.com; location / { root "I:/EasyPHP/www/pie"; index index.html index.htm index.php default.php; if ($host ~ ^www\.dxpie\.com.*$) { rewrite ^/?do-(.*)\.html?$ /index.php?act=public&todo=$1 last; } if ($host ~ ^event\.dxpie\.com.*$) { rewrite ^/?([a-zA-Z_]+)(-(\d*))?-p(\d*)\.html?$ /event.php?mod=event&act=$1&id=$3&page=$4&todo=pager last; rewrite ^/?([a-zA-Z_]+)(-(\d*))?-ap(\d*)\.html?$ /event.php?mod=event&act=$1&id=$3&page=$4&todo=ajaxpager last; rewrite ^/?([a-zA-Z_]+)(-(\d*))?\.html?$ /event.php?mod=event&act=$1&id=$3 last; rewrite ^/?(\w+)-(\d+)-c(\d)(\d+)\.html?$ event.php?mod=event&act=$1&pid=$2&gid=$4&index=$3&level=2 last; rewrite ^/?(\w+)-(\d+)-c(\d)(\d+)-ap(\d+)\.html?$ event.php?mod=event&act=$1&pid=$2&gid=$4&index=$3&level=2&page=$5&todo=ajaxpager last; break; } } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } location ~ .*\.php?$ { root "I:/EasyPHP/www/pie"; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME "I:/EasyPHP/www/pie/$fastcgi_script_name"; include fastcgi_params; } }
我用这个做例子,是因为可以解决很多问题
2.1,每一个主机,就是一个server{}
2.2,server_name, 可以同时配置多个域名,而不要像apache一样,一个域名要写个节点
2.3,主机下面设server_name, 配置根目录,配置该路径的fastcig参数,自己看代码
2.4,上面的URL重写演示了nginx的规则,对应的.htaccess列下下面,没时间学习的话,就从这两段看一下差别吧:
RewriteCond %{HTTP_HOST} ^www\.dxpie\.com$ RewriteRule ^do-(.*)\.html?$ index.php?act=public&todo=$1 [L] RewriteRule ^getfocus\.html?$ index.php?todo=focus [L] RewriteCond %{HTTP_HOST} ^event\.dxpie\.com$ RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{HTTP_HOST} ^event\.dxpie\.com$ RewriteRule ^([a-zA-Z_]+)(-(\d*))?\.html?$ event.php?mod=event&act=$1&id=$3 [QSA,L] RewriteCond %{HTTP_HOST} ^event\.dxpie\.com$ RewriteRule ^([a-zA-Z_]+)(-(\d+))?-p(\d+)\.html?$ event.php?mod=event&act=$1&id=$3&page=$4&todo=pager [QSA,L] RewriteCond %{HTTP_HOST} ^event\.dxpie\.com$ RewriteRule ^([a-zA-Z_]+)(-(\d*))?-ap(\d*)\.html?$ event.php?mod=event&act=$1&id=$3&page=$4&todo=ajaxpager [QSA,L]
相比较而言,nginx的if语句更容易让大多数人接受吧
2.5,最后一节的php配置,经过我的多次测试,光把默认的fastcgi_params给include进来是不够的,所以加了这一行:
fastcgi_param SCRIPT_FILENAME “目录位置/$fastcgi_script_name”;照抄就是了,已经测试很多回了,愿意解释的可以留言:)
3,经过上面的这个例子,配别的路径也就很称手了,没有url重写的话,会简洁很多,基本上只要加一下fastcgi_param这个就可以了,比如我把之前同easyphp一起装下来的phpmyadmin给虚拟进来,(我的apache,php,mysql用的是EASYPHP,相当强悍+方便,推荐在win上使用,请google之),那么我这么配置
server { listen 80; server_name my.sql; location / { root "I:/EasyPHP/phpmyadmin"; index index.html index.htm index.php default.php; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } location ~ .*\.php?$ { root "I:/EasyPHP/phpmyadmin"; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME "I:/EasyPHP/phpmyadmin/$fastcgi_script_name"; include fastcgi_params; } }
注意,my.sql是我在hosts文件里面指向127.0.0.1的,这样方便我以后直接用这个域名管理数据库
4,当前这么访问到的数据库好像还是nginx的,既然我之前已经有了环境,那么肯定要把之前的用上,于是轮到/MySQL5.1/my.ini出场了,把里面的datadir改成你数据库的路径,basedir不要动:
[mysqld] basedir=I:/NPMserv/MySQL5.1 ;datadir=I:/NPMserv/MySQL5.1/data 这是原来的 datadir="I:/EasyPHP/mysql/data" port=3306 interactive_timeout=240 wait_timeout=240
现在启动npmserver试试, 访问localhost,是不是看到了经典的nginx界面?然后试试几个虚拟主机目录,phpmyadmin,是不是都成功了?不行的话仔细对着上面看一下。
5,顺便分享一下python在nginx上我的配置
#python server { listen 80; server_name py.thon; location / { # host and port to fastcgi server fastcgi_pass 127.0.0.1:9000; fastcgi_param PATH_INFO $fastcgi_script_name; fastcgi_param REQUEST_METHOD $request_method; fastcgi_param QUERY_STRING $query_string; fastcgi_param CONTENT_TYPE $content_type; fastcgi_param CONTENT_LENGTH $content_length; fastcgi_pass_header Authorization; fastcgi_param REMOTE_ADDR $remote_addr; fastcgi_param SERVER_PROTOCOL $server_protocol; fastcgi_param SERVER_PORT $server_port; fastcgi_param SERVER_NAME $server_name; fastcgi_intercept_errors off; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } location ^~ /media/ { alias "I:/python26/Lib/site-packages/django/contrib/admin/media/"; } location ^~ /site_media/{ alias "E:/codes/python/newtest/media/"; } location ~* ^.+\.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js|mov)$ { root "E:/codes/python/newtest"; access_log off; } }