征服 Nginx

赶上要配置测试服务器,赶上 Nginx-1.2.0 stable version 释放,正好重新配置一下Nginx!  


相关内容: 
征服 Apache + SSL 
征服 Apache + SVN 
征服 Apache + SVN +  LDAP 
征服 Apache + Tomcat 
征服 Nginx 
征服 Nginx + Tomcat 


一、准备工作  
下载如下组件: 

pcre,有关正则表达式匹配;zlib,用于压缩。这些就不细说了,如果要安装最简版的nginx,记得准备好这两样东西就好了。 
用root账户启动服务是比较危险的!   前段时间,测试服务器被黑掉了,终归到底是通过一个root启动的服务上传了木马,最后连ssh都屏蔽了,活生生成为一台肉鸡。。。  
所以,惨痛的经验告诉我,一定要为服务建立对应的组和用户,限制访问权限,降低风险!   
这里为nginx建立一个www组,并建立一个不登录的账户nginx: 

Shell代码   收藏代码
  1. #追加一个www组  
  2. groupadd -f www  
  3. #追加一个nginx用户  
  4. useradd -s /sbin/nologin -g www nginx  


建立一个目录用于存放nginx日志文件,并赋予相应权限: 
Shell代码   收藏代码
  1. #建立nginx日志目录  
  2. mkdir /var/log/nginx  
  3. #赋予访问权限  
  4. chown nginx.www /var/log/nginx  


二、编译安装  
我把pcre、zlib、nginx的压缩包都放在了 /opt/software 路径下,服务要装在 /opt/servers 路径下。 
先对pcre、zlib、nginx解压,然后编译安装: 
Shell代码   收藏代码
  1. ./configure --prefix=/opt/servers/nginx \  
  2. --user=nginx \  
  3. --group=www \  
  4. --pid-path=/var/run/nginx.pid \  
  5. --error-log-path=/var/log/nginx/error.log \  
  6. --http-log-path=/var/log/nginx/access.log \  
  7. --with-pcre=/opt/software/pcre-8.10 \  
  8. --with-zlib=/opt/software/zlib-1.2.5 \  
  9. --with-http_stub_status_module \  
  10. --with-http_realip_module \  
  11. --with-http_gzip_static_module \  
  12. --without-http_fastcgi_module \  
  13. --without-http_memcached_module \  
  14. --without-http_map_module \  
  15. --without-http_geo_module \  
  16. --without-http_autoindex_module \  
  17. --with-poll_module   
  18. && make && make install   


三、系统配置  
我希望nginx可以作为一个服务,通过service命令启动或停止。 
这样做的好处是,不论我用什么用户调用这个service命令,都不会因为使用错误的账户带来安全问题。 
建立一个系统文件: 
Shell代码   收藏代码
  1. vim /etc/init.d/nginx  


前人栽树,后人乘凉。已经有老鸟做好了启动配置文件: 
Shell代码   收藏代码
  1. #!/bin/bash  
  2. # v.0.0.1  
  3. # create by jackbillow at 2007.10.15  
  4. # nginx - This shell script takes care of starting and stopping nginx.  
  5. #  
  6. # chkconfig: - 60 50  
  7. # description: nginx [engine x] is light http web/proxy server  
  8. # that answers incoming ftp service requests.  
  9. # processname: nginx  
  10. # config: /etc/nginx.conf  
  11. nginx_path="/opt/servers/nginx"  
  12. nginx_pid="/var/run/nginx.pid"  
  13.   
  14. # Source function library.  
  15. . /etc/rc.d/init.d/functions  
  16.   
  17. # Source networking configuration.  
  18. . /etc/sysconfig/network  
  19.   
  20. # Check that networking is up.  
  21. [ ${NETWORKING} = "no" ] && exit 0  
  22. [ -x $nginx_path/sbin/nginx ] || exit 0  
  23. RETVAL=0  
  24. prog="nginx"  
  25. start() {  
  26. # Start daemons.  
  27. if [ -e $nginx_pid -a ! -z $nginx_pid ];then  
  28.         echo "nginx already running...."  
  29.         exit 1  
  30. fi  
  31. if [ -e $nginx_path/conf/nginx.conf ];then  
  32.         echo -n $"Starting $prog: "  
  33.         $nginx_path/sbin/nginx -c $nginx_path/conf/nginx.conf &  
  34.         RETVAL=$?  
  35.         [ $RETVAL -eq 0 ] && {  
  36.                 touch /var/lock/subsys/$prog  
  37.                 success $"$prog"  
  38.         }  
  39.         echo  
  40. else  
  41.         RETVAL=1  
  42. fi  
  43.         return $RETVAL  
  44. }  
  45. # Stop daemons.  
  46. stop() {  
  47.         echo -n $"Stopping $prog: "  
  48.         killproc -d 10 $nigx_path/sbin/nginx  
  49.         RETVAL=$?  
  50.         echo  
  51.         [ $RETVAL = 0 ] && rm -f $nginx_pid /var/lock/subsys/$prog  
  52. }  
  53. # See how we were called.  
  54. case "$1" in  
  55. start)  
  56.         start  
  57.         ;;  
  58. stop)  
  59.         stop  
  60.         ;;  
  61. restart)  
  62.         stop  
  63.         start  
  64.         ;;  
  65. status)  
  66.         status $prog  
  67.         RETVAL=$?  
  68.         ;;  
  69. *)  
  70.         echo $"Usage: $0 {start|stop|restart|status}"  
  71.         exit 1  
  72. esac  
  73. exit $RETVAL  


注意,这里的路径: 
引用
nginx_path="/opt/servers/nginx" 
nginx_pid="/var/run/nginx.pid" 


如果你的nginx安装路径在其它位置,请对应修改!  
然后赋予这个文件执行权限: 
Shell代码   收藏代码
  1. chmod +x /etc/init.d/nginx  


追加为系统服务: 
Shell代码   收藏代码
  1. chkconfig --add nginx  
  2. chkconfig nginx on  


现在就可以使用,如下命令控制nginx服务了!  
引用
#启动nginx 
service nginx start 
#停止nginx 
service nginx stop 
#重启nginx 
service nginx restart 
#查看nginx状态 
service nginx status 


三、vim语法支持  
vim对于nginx配置文件的支持不那么友好,无法对关键字高亮显示。   
不过,没关系。我们可以通过修改 ~/.vim 配置,增强vim功能。 
参考 vim for nginx   配置VIM语法高亮及自动缩进  

 

可能你的用户目录下并没有 .vim 这个目录,需要自行建立。 
Shell代码   收藏代码
  1. mkdir ~/.vim  
  2. mkdir ~/.vim/syntax  


建立针对nginx的配置文件,这里的nginx配置文件的路径是 /opt/servers/nginx/conf ,注意对应修改: 
Shell代码   收藏代码
  1. echo 'au BufRead,BufNewFile /opt/servers/nginx/conf/* set ft=nginx' > ~/.vim/filetype.vim  


最后,请出主角(下载的是本文的附件  ): 
Shell代码   收藏代码
  1. wget http://dl.iteye.com/topics/download/7979de38-1263-3b65-8f7a-e5f567d40fec  
  2. unzip nginx.zip  
  3. mv nginx.vim ~/.vim/syntax/  

这样就ok了!  

四、基本配置  
完成上述工作后,nginx还不能急于投入使用,需要做一些基本配置与优化工作。 
修改nginx配置文件: 
Shell代码   收藏代码
  1. vim /opt/servers/nginx/conf/nginx.conf  

微调 
引用

#使用的用户和组,这里我们为nginx服务新建了nginx账户和www工作组 
user  nginx www; 
#制定的工作衍生进程数(2倍于CPU内核数) 
worker_processes  4; 
#错误日志存放路径,日志级别由低到高[debug | info | notice | warn | error | crit] 
error_log  /var/log/nginx/error.log crit; 
#指定文件描述符数量 与ulimit -n数值保持一致 
work_rlimit_nofile 65535; 
events { 
#使用的网络I/O模型,Linux用epoll模型,Unix用kqueue模型 
use epoll; 
#允许的连接数 
worker_connections 51200; 

http{ 
    include       mime.types; 
    default_type  application/octet-stream; 
    #追加 '"$sent_http_cache_control" "$sent_http_pl" "$request_time"'获取请求细节信息 
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" ' 
                      '$status $body_bytes_sent "$http_referer" ' 
                      '"$http_user_agent" "$http_x_forwarded_for"' 
                      '"$sent_http_cache_control""$sent_http_pl" "$request_time"'; 
    access_log          /var/log/nginx/access.log  main; 
    ... 
    server{ 
        ... 
        location / { 
            root   html; 
            index  index.html index.htm index.jsp index.do; 
            #在header中传递请求放host、ip等信息 
            proxy_set_header Host $host; 
            proxy_set_header X-Real-IP $remote_addr; 
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
            proxy_pass_header Content-Type; 
            proxy_pass_header Content-Disposition; 
            proxy_pass_header Content-Length; 
            ... 
        } 
    } 



五、虚拟目录  
nginx配置虚拟目录很简单,主要是运用root、alias两个指令。 
以访问图片服务为例: 
root,用于相对路径 
引用

        location /image/ { 
             root /data; 
        } 

当我们访问“/image/”路径时,实际上访问的是“/data/image/”,注意“/data”后面不要有“/” 
alias,用于绝对路径 
引用

        location /image/ { 
                alias /data/img/; 
        } 

当我们访问“/image/”路径时,实际上访问的是“/data/img/”,注意“/data/img/”以“/”结尾。 

六、重定向  
有时候链接不加考虑就放出去了,突然哪天需要调整,又不能及时撤回已放出的链接地址。只好自己修改nginx配置。 
譬如,放出去的链接:/activity.do?m=v 想让它指到/路径上: 
引用
rewrite ^/activity(.*)$ / last;


想要把请求来的参数也带上: 
引用
rewrite ^/activity(.*)$ /$1 last;


$1 指得是第一个参数,以此类推。 


六、监控  
引用
       location /status { 
            stub_status on; 
            access_log   off; 
            allow  10.10.0.0/16; 
            allow  10.1.0.0/16; 
            allow  10.11.0.0/16; 

            deny all; 
        }


引用

Active connections: 14 
server accepts handled requests 
62 62 302 
Reading: 0 Writing: 3 Waiting: 11 


七、日志分割  
Shell代码   收藏代码
  1. #!/bin/bash  
  2. # THis script run at 00:00  
  3. # author dongliang at 2012-09-07  
  4. # Nginx Log Path  
  5. logs_path="/var/log/nginx/"  
  6. # Nginx PID Path  
  7. nginx_pid="/var/run/nginx.pid"  
  8.   
  9. mkdir -p ${logs_path}$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")/  
  10.   
  11. mv ${logs_path}access.log ${logs_path}$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")/access_$(date -d "yesterday" +"%Y%m%  
  12. d").log  
  13.   
  14. mv ${logs_path}error.log ${logs_path}$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")/error_$(date -d "yesterday" +"%Y%m%d"  
  15. ).log  
  16.   
  17. kill -USR1 `cat $nginx_pid`  


赋予执行权限 
Shell代码   收藏代码
  1. chmod +x nginx_log.sh  

凌晨执行 
Shell代码   收藏代码
  1. crontab -e  
  2. 0 0 * * * /opt/script/nginx_log.sh  




相关内容: 
征服 Apache + SSL 
征服 Apache + SVN 
征服 Apache + SVN +  LDAP 
征服 Apache + Tomcat 
征服 Nginx 
征服 Nginx + Tomcat 


[url=http://code.google.com/p/nginx-auth-ldap/downloads/detail?name=ngx_http_auth_ldap_module-1.0-a3.tar.gz&can=1&q=][/url]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值