Nginx搭建Web环境

来源:互联网 发布:知彼手机防盗 编辑:程序博客网 时间:2024/06/05 09:19
Nginx/0.7.6 php5.2.6 在windows下的配置   2008-08-01 14:35
源:http://hi.baidu.com/usen68/blog/item/214428ecff646d2163d09f7d.html
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.dlllibmysql.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二进制文件.

    cd /usr/local/src/lighttpd-1.4.18
    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

                tar zxvf pcre-7.2.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       //主配置文件

    user  www www;
    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_pass  127.0.0.1:8085;
    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

    server
           {
                   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

    server
           {
                   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下是否容易实现呢?答案是肯定的.

                                                 #Preventing hot linking of images and other file types
                         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

    server
           {
                   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

    limit_zone   one  $binary_remote_addr  10m;
    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/php-fcgi/bin/spawn-fcgi -a 127.0.0.1 -p 8085 -C 250 -u www -f/usr/local/php-fcgi/bin/php-cgi
    /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

原创粉丝点击