Nginx搭建Web环境
来源:互联网 发布:知彼手机防盗 编辑:程序博客网 时间:2024/06/05 09:19
nginx [engine x] 是由 Igor Sysoev开 发的一个HTTP 服务器和mail 代理服务器软件.虽然刚刚发布两年多, Nginx 因其稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。Nginx 超越Apache的高性能和稳定性,使得国内使用 Nginx 作为 Web 服务器的网站也越来越多,其中有新浪、网易、腾讯等门户网站,六间房、酷6等视频分享网站,Discuz!、水木社区等知名论坛,豆瓣、YUPOO等新兴 Web 2.0网站。Nginx 在国内的应用正在不断发展壮大!参照配置如下:
首先 到nginx for windows由第三方编译的nginx Windows 版本下载,并到PHP 官方下载php;
其次 安装nginx(默认安装到C:/nginx),然后以cgi 模式安装php 到C:/php ,接下来就是nginx 配置
我的nginx 配置单:
PHP配置 http://www.tonightdream.com/archives/207.html
PHP解压置C盘
拷贝PHP目录下的php.ini-recommended至C:/WINDOWS下并改名php.ini
编辑php.ini文件(修改doc_root = "C:/nginx/html" 529行 extension_dir = "C:/php/ext" 536行 开启extension=php_gd2.dll extension=php_mysql.dll等)
拷贝PHP目录下的php5ts.dll和libmysql.dll(开启MYSQL)至C:/WINDOWS/system32下(干脆就将PHP目录下的DLL文件都拷贝至C:/WINDOWS/system32下)
第三 启动nginx 服务器,再启动php 的cgi sever 。关于php cgi server 可以使用以下命令:
php-cgi.exe -b 127.0.0.1:9000 -q
C:/php>php-cgi.exe -b 127.0.0.1:9000 -q(在CMD命令符下运行,直接打开不能启动)
这样做,缺陷是命令行窗口一直打开,若关闭那cgi server 也关闭啦。到网上下载RunHiddenConsole.exe 可以使命令行窗口隐藏啦。(RunHiddenConsole.exe下载页面 )
RunHiddenConsole.exe php-cgi.exe -b 127.0.0.1:9000 -q
你也可以写一个批处理来做这件事:
@echo off
start /min RunHiddenConsole.exe php-cgi.exe -b 127.0.0.1:9000 -q
最后 就是写一个简单PHPINFO 来验证PHP 是否工作正常。
==========================================================================
Windows下Nginx以服务的方式运行
从wnmp发布以来,很多朋友就问Windows下如何将Nginx加入服务中,以便于服务器重启后自动运行,我在朋友的留言中回复了,可能不是很好找,便整理在此,便于需要的朋友查找。
假设nginx安装在c:/nginx/下:
1.下载微软服务注册工具srvany.exe, instsrv.exe, srvany-instsrv存放到c:/nginx/目录下
2.安装Nginx服务, 将命令行切换到c:/nginx/,执行下列命令
instsrv NGINX c:/nginx/srvany.exe
3.在c:/nginx/下,新建一个nginx.reg文件,输入一下内容:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/NGINX/Parameters]
“Application”=”C://nginx//nginx.exe”
“AppParameters”=”"
“AppDirectory”=”C://nginx//”
5.让服务与程序关联起来, 命令行执行
regedit /s nginx.reg
6.编辑启动nginx脚本start-nginx.bat(关闭脚本不用变), 让程序以服务方式运行
@ECHO OFF
net stop nginx
net start nginx
EXIT
完成~
======================================================
利用Nginx替代apache实现高性能的Web环境 2007-11-27作者:NetSeek
原文链接:http://bbs.linuxpk.com/thread-11845-1-1.html
Nginx介绍:
Nginx发音为[engine x],是由俄罗斯人Igor Sysoev建立的项目,基于BSD许可。
据说他当初是F5的成员之一,英文主页:http://nginx.net。俄罗斯的一些大网站已经使用它超过两年多了, 一直表现不凡,相信想了解nginx的朋友都读过阿叶大哥的利用nginx实现负载均衡的文章相关链接见(六)。
测试环境:红动中国(redocn)提供运营服务器环境.
关于红动服务环境:
红动中国在早期利用apache环境,再加上一些优化的工作,一直是相对很稳定,但是最近由于网站发展,访问量越来越大,在线人数一多经常出现,负载过高,性能急剧下降,经过双木站长的同意,考虑是否能利用nginx来代替apache,经过长时间的观察目前nginx工作很稳定,系统也不会再说现高负载的状况,占用内存也很低,访问速率从用户体验来看明显有提升.
关于红动中国:
红动中国(redocn)论坛经过近1年的快速发展,目前日均页面访问量超过100万,位居全球设计论坛(中文)第1位,是国内最具影响力的设计论坛之一。目前论坛拥有近20万会员,包括众多设计界领军人物在内的行业中坚力量、相关艺术院校师生以及部分设计爱好者等。
迁移目标:实现网站论坛静态化,防盗链,下载并发数和速率限制,实现原站apache所具有的所有功能,将原apache环境下的站点全部迁移到Nginx
一.PHP(Fastcgi)编译安装
[root@att php-5.2.4]# cat in.sh
- ./configure /
--prefix=/usr/local/php-fcgi /
--enable-fastcgi /
--enable-discard-path /
--enable-force-cgi-redirect /
--with-config-file-path=/usr/local/php-fcgi/etc /
--enable-zend-multibyte /
--with-mysql=/usr/local/mysql /
--with-libxml-dir=/usr/local/libxml2 /
--with-gd=/usr/local/gd2 /
--with-jpeg-dir /
--with-png-dir /
--with-bz2 /
--with-freetype-dir /
--with-iconv-dir /
--with-zlib-dir /
--with-openssl=/usr/local/openssl /
--with-mcrypt=/usr/local/libmcrypt /
--enable-sysvsem /
--enable-inline-optimization /
--enable-soap /
--enable-gd-native-ttf /
--enable-ftp /
--enable-mbstring /
--enable-exif /
--disable-debug /
--disable-ipv6
make
make install
cp php.ini-dist /usr/local/php-fcgi/etc/php.ini
注:关于如何安装gd库,mysql的编译安装,本文将不介绍,本文重点在于介绍nginx的安装与配置,如想了解其它相关的问题可以到
LinuxPk去找相关的贴子(http://bbs.linuxpk.com)
二.Nginx编译安装
1.创建nginx运行用户和虚拟主机目录
groupadd www -g 48
useradd -u 48 -g www www
mkdir -p /data/www/wwwroot
chown -R www:www /data/www/wwwroot
2.安装lighttpd中附带的spawn-fcgi,用来启动php-cgi
先编译安装lighttpd产生spawn-fcgi二进制文件.
cp src/spawn-fcgi /usr/local/php-fcgi/bin/
启动php-cgi进程,监听127.0.0.1的8085端口,进程数为250(如果服务器内存小于3GB,可以只开启25个进程),用户为www:
/usr/local/php-fcgi/bin/spawn-fcgi -a 127.0.0.1 -p 8085 -C 250 -u www -f /usr/local/php-fcgi/bin/php-cgi
3.nginx的安装与配置
安装Nginx所需的pcre库:
http://ftp.dk.debian.org/exim/pcre/pcre-7.3.tar.gz
cd pcre-7.2/
./configure
make && make install
cd ../
http://sysoev.ru/nginx/nginx-0.5.32.tar.gz
tar zxvf nginx-0.5.32.tar.gz
cd nginx-0.5.32
./configure --user=www --group=www --prefix=/usr/local/nginx/ --with-http_stub_status_module --with-
openssl=/usr/local/openssl
make && make install
此模块非核心模块,需要在编译的时候手动添加编译参数 --with-http_stub_status_module
配置nginx
三.Nginx主配置文件及PHP支持.
1.nginx.conf 主配置文件的配置
#cd /usr/local/nginx/conf/
#cp nginx.conf nginx.conf.cao
#cat /dev/null > nginx.conf
#vi nginx.conf //主配置文件
worker_processes 10;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
pid /var/run/nginx.pid;
#Specifies the value for maximum file descriptors that can be opened by this process.
worker_rlimit_nofile 51200;
events
{
use epoll;
#maxclient = worker_processes * worker_connections / cpu_number
worker_connections 51200;
}
http
{
include conf/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 /data/www/logs/access.log main;
#sendfile on;
tcp_nopush on;
tcp_nodelay off;
keepalive_timeout 60;
client_header_timeout 3m;
client_body_timeout 3m;
send_timeout 3m;
connection_pool_size 256;
client_header_buffer_size 1k;
large_client_header_buffers 4 2k;
request_pool_size 4k;
output_buffers 4 32k;
postpone_output 1460;
client_max_body_size 10m;
client_body_buffer_size 256k;
client_body_temp_path /dev/shm/client_body_temp;
proxy_temp_path /usr/local/nginx/proxy_temp;
fastcgi_temp_path /usr/local/nginx/fastcgi_temp;
#gzip
gzip on;
gzip_http_version 1.0;
gzip_comp_level 2;
gzip_proxied any;
gzip_types text/plain text/html text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript;
gzip_min_length 1100;
gzip_buffers 4 8k;
# The following includes are specified for virtual hosts //以下是加载虚拟主机配置.
#[url]www.redocn.com[/url]
include conf/vhosts/www_redocn_com.conf;
#bbs.redocn.com
include conf/vhosts/bbs_redocn_com.conf;
#blog.redocn.com
include conf/vhosts/blog_redocn_com.conf;
#down.redocn.com
include conf/vhosts/down_redocn_com.conf;
}
2.配置支持Fastcgi模式的PHP
[root@redocn conf]# cat enable_php5.conf
fastcgi_index index.php;
fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx;
#new ac upload
#fastcgi_pass_request_body off;
#client_body_in_file_only clean;
#fastcgi_param REQUEST_BODY_FILE $request_body_file;
#
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_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $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 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;
# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param REDIRECT_STATUS 200;
四,多虚拟主机应用配置案例.
#mkdir /usr/local/nginx/conf/vhosts //建立虚拟主机配置存放目录.
1.www.redocn.com //首站配置
[root@redocn vhosts]#vi www_redocn_com.conf
{
listen 80;
server_name www.redocn.com;
index index.html index.htm index.php;
root /data/www/wwwroot;
error_page 404 http://bbs.redocn.com;
rewrite ^/bbs/(.*) http://bbs.redocn.com/$1;
location ~ .*/.php?$
{
include conf/enable_php5.conf;
}
}
注: 关于rewite需求,红动中国希望当用户访问http://www.redocn.com/bbs的时候自动转至http://bbs.redocn.com
在原apache中利用redirect实现
Redirect /bbs http://bbs.redocn.com
本文中在nginx下利用rewrite实现:
rewrite ^/bbs/(.*) http://bbs.redocn.com/$1;
2.[root@redocn vhosts] vi bbs_redocn_com.conf
{
listen 80;
server_name bbs.redocn.com yan.redocn.com majia.redocn.com wt.redocn.com;
index index.html index.htm index.php;
root /home/www/htdocs/bbs;
access_log /var/log/nginx/access_bbs.redocn.com.log combined;
location / {
#bbs rewrite
rewrite ^/archiver/((fid|tid)-[/w/-]+/.html)$ /archiver/index.php?$1 last;
rewrite ^/forum-([0-9]+)-([0-9]+)/.html$ /forumdisplay.php?fid=$1&page=$2 last;
rewrite ^/thread-([0-9]+)-([0-9]+)-([0-9]+)/.html$ /viewthread.php?tid=$1&extra=page/%3D$3&page=$2 last;
rewrite ^/space-(username|uid)-(.+)/.html$ /space.php?$1=$2 last;
rewrite ^/tag-(.+)/.html$ /tag.php?name=$1 last;
break;
#error
error_page 404 /index.php;
#redirect server error pages to the static page /50x.html
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
#Preventing hot linking of images and other file types
location ~* ^.+/.(gif|jpg|png|swf|flv|rar|zip)$ {
valid_referers none blocked server_names
*.redocn.com redocn.com *.taobao.com taobao.com
bbs.blueidea.com bbs.asiaci.com bbs.arting365.com forum.chinavisual.com softbbs.pconline.com.cn
bbs.chinaddu.com bbs.photops.com *.baidu.com *.google.com *.google.cn *.soso.com *.yahoo.com.cn
*.yahoo.cn;
if ($invalid_referer) {
rewrite ^/ http://www.redocn.com/images/redocn.gif;
#return 403;
}
}
#support php
location ~ .*/.php?$
{
include conf/enable_php5.conf;
}
}
注:
1.红动中国采用高性能的Discuz!论坛,原apache的rewrite规则几乎不要做什么修改即可全部移植到nginx下.
静态化配置见面上面的:#bbs rewrite部分.
2.一般论坛都希望实现防盗链功能,在apache很轻松实现?在nginx下是否容易实现呢?答案是肯定的.
valid_referers none blocked server_names *.redocn.com redocn.com ...你允许连接的网址;
if ($invalid_referer) {
rewrite ^/ http://www.redocn.com/images/redocn.gif; //让别人盗链时显示你指定的图片.
#return 403;
}
3.blog.redocn.com
[root@redocn vhosts]#vi blog_redocn_com.conf
{
listen 80;
server_name blog.redocn.com;
index index.html index.htm index.php;
root /data/www/wwwroot/blog;
error_page 404 http://bbs.redocn.com;
#supsite rewrite
rewrite ^([0-9]+)/spacelist(.*)$ index.php?$1/action_spacelist$2;
rewrite ^([0-9]+)/viewspace_(.+)$ index.php?$1/action_viewspace_itemid_$2;
rewrite ^([0-9]+)/viewbbs_(.+)$ index.php?$1/action_viewbbs_tid_$2;
rewrite ^([0-9]+)/(.*)$ index.php?$1/$2;
rewrite ^([0-9]+)$ index.php?$1;
rewrite ^action_(.+)$ index.php?action_$1;
rewrite ^category_(.+)$ index.php?action_category_catid_$1;
rewrite ^itemlist_(.+)$ index.php?action_itemlist_catid_$1;
rewrite ^viewnews_(.+)$ index.php?action_viewnews_itemid_$1;
rewrite ^viewthread_(.+)$ index.php?action_viewthread_tid_$1;
rewrite ^index([/.a-zA-Z0-9]*)$ index.php;
rewrite ^html/([0-9]+)/viewnews_itemid_([0-9]+)/.html$ index.php?action_viewnews_itemid_$2;
rewrite ^/([0-9]+)/spacelist(.+)$ /index.php?uid/$1/action/spacelist/type$2;
rewrite ^/([0-9]+)/viewspace(.+)$ /index.php?uid/$1/action/viewspace/itemid$2;
rewrite ^/([0-9]+)/viewbbs(.+)$ /index.php?uid/$1/action/viewbbs/tid$2;
rewrite ^/([0-9]+)/(.*)$ /index.php?uid/$1/$2;
rewrite ^/([0-9]+)$ /index.php?uid/$1;
rewrite ^/action(.+)$ /index.php?action$1;
rewrite ^/category(.+)$ /index.php?action/category/catid$1;
rewrite ^/viewnews(.+)$ /index.php?action/viewnews/itemid$1;
rewrite ^/viewthread(.+)$ /index.php?action/viewthread/tid$1;
rewrite ^/mygroup(.+)$ /index.php?action/mygroup/gid$1;
location ~ .*/.php?$
{
include conf/enable_php5.conf;
}
}
注:blog采用功能强大的Supesite作为Blog站点: http://www.supesite.com/
1.Blog如何在Nginx里实现静态化,具体设置见,上面的#supesite rewrite
4.down.redocn.com
[root@redocn vhosts]# vi down_redocn_com.conf
server
{
listen 80;
server_name down.redocn.com;
index index.html index.htm index.php;
root /data/www/wwwroot/down;
error_page 404 /index.php;
# redirect server error pages to the static page /50x.html
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
#Zone limit
location / {
limit_conn one 1;
limit_rate 20k;
}
# serve static files
location ~ ^/(images|javascript|js|css|flash|media|static)/ {
root /data/www/wwwroot/down;
expires 30d;
}
}
注:
由于现在的BT下载软件越来越多了,我们如何限制下载的并发数和速率呢?apache需要三方模块,nginx就不用了
在nginx利用两个指令即可实现:limit_zone(limit_conn) 来限制并发数,limit_rate来限制下载的速率,请看上面的配置实例.
5.启动nginx服务
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
你可以把上面两条命令制做成系统启动服务脚本,相关的脚本在网上也很多,本文就不再贴出来了,给出一个实例链接:
http://topfunky.net/svn/shovel/nginx/init.d/nginx
五.问题及经验总结:
1.安装Discuz论坛后,无法上传大于M以上的附件?
在主配置文件里加入:client_max_body_size 10m; 详细指令说明请参见(六)提供的Wiki链接.
2.Discuz附件无法下载附件?
最近遇到一个奇怪的问题在nginx下discuz论坛无法下载附件,后来打开error_log才知道,仍后一看/usr/local分区满了,
清了一大堆无用文件后,马上就正常了.
以上是本人迁移和测试过程中遇到的两个小问题,在此附上说明,只是希望配置nginx的朋友不要犯我一样的问题.
欢迎联系NetSeek(狂热linux爱好者^_^ msn:cnseek@msn.com QQ:67888954 Gtalk:cnseek@gmail.com).
六.相关链接:
1.Discuz!.net高性能的PHP论坛程序 http://www.discuz.net Supesite: http://www.supesite.com/
2.Nginx参考文档:http://wiki.codemongers.com/
3.利用Nginx实现负载均衡(阿叶大哥的文章):http://www.imysql.com/comment/reply/210
4.linuxPk[Linux宝库]:http://bbs.linuxpk.com
5.红动中国 http://bbs.redocn.com
- Nginx搭建Web环境
- nginx+apache+squid搭建集群web环境
- CentOS+nginx+Django+Postgresql web环境搭建
- Nginx+Apache搭建前后端web生产环境
- nginx+apache+mysql+php+memcache+squid搭建集群web环境
- nginx+apache+mysql+php+memcache+squid搭建集群web环境
- nginx+apache+mysql+php+memcached+squid搭建集群web环境
- virtualenv 环境下 Flask + Nginx + Gunicorn+ Supervisor 搭建 Python Web
- Docker:搭建tomcat+mysql+web+nginx运行环境
- Nginx+Gunicorn+Django+Supervisor搭建web服务环境
- CentOS下Nginx+fastcgi+python2搭建web.py服务环境
- CentOS下Nginx+fastcgi+python3搭建web.py服务环境
- 搭建Nginx+Java环境
- 搭建Nginx+Java环境
- nginx环境搭建
- 搭建Nginx+Java环境
- 搭建Nginx+Java环境
- 搭建nginx环境
- 刚开通的
- 大学生活该怎么度过
- Linux使用技巧集
- 最容易上手的EJB教程
- Error:'Sys' is undefined.
- Nginx搭建Web环境
- VS2008 下安装 AjaxControlToolkit-Framework3.5
- ClientScriptManager与ScriptManager向客户端注册脚本的区别
- Migrate apps from Internet Explorer to Mozilla
- 动态调用WebService并把对象缓存在本地....
- 王爽《汇编语言》第十四章读取CMOS时钟练习解答
- 安装JDK1.6
- 作业:会员制营销|Email营销(关于山姆公司的)
- “会员制营销”和“E-mail营销”的培训方案