码迷,mamicode.com
首页 > 其他好文 > 详细

编译安装Nginx及基本配置

时间:2014-12-29 11:43:26      阅读:234      评论:0      收藏:0      [点我收藏+]

标签:

一、编译安装Nginx

yum install pcre-devel openssl-devel zlib-devel gcc gcc-c++ -y        ==>编译前所需要的包
# groupadd -r nginx        ==>新建nginx系统组
# useradd -r -g nginx nginx        ==>nginx系统帐号
# ./configure --prefix=/usr/local/nginx --conf-path=/etc/nginx/nginx.conf --user=nginx --group=nginx --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx/nginx.pid --lock-path=/var/lock/nginx.lock --with-http_ssl_module --with-http_stub_status_module --with-http_gzip_static_module --with-http_flv_module --with-http_mp4_module --http-client-body-temp-path=/var/tmp/nginx/client --http-proxy-temp-path=/var/tmp/nginx/proxy --http-fastcgi-temp-path=/var/tmp/nginx/fastcgi
--prefix=/usr/local/nginx        ==>安装部署后的根目录,默认为/usr/local/nginx
--conf-path=/etc/nginx/nginx/nginx.conf        ==>配置文件的放置路径,默认<prefix>/conf/nginx.conf
--user=nginx        ==>指定worker进程运行时所属的用户
--group=nginx         ==>指定worker进程运行是所属的组
--error-log-path=/var/log/nginx/errpr.log        ==>error日志放置位置
--http-log-path=/var/log/nginx/access.log        ==>access日志放置的位置
--pid-path=/var/run/nginx/nginx.pid        ==>pid文件的存放路径;默认<prefix>/logs/nginx.pid
--lock-path=/var/lock/nginx.lock        ==>lock文件的放置路径;默认<prefix>/logs/nginx.lock
--with-http_ssl_module        ==>提供HTTPS服务;该模块的安装依赖于OpenSSL开源软件
--with-http_stub_status_module        ==>能够获取Nginx自上次启动以来的工作状态
--with-http_gzip_static_module        ==> 如果采用gzip 模块把一些文档进行gzip 格式压缩后再返回给客户端,那么对同一个文件每次都会重新压缩,这是比较消耗服务器CPU 资源的. gzip static 模块可以在做gzip 压缩前,先查看相同位置是否有已经做过gzip 压缩的.gz 文件,如果有,就直接返回。这样就可以预先在
服务器上做好文档的压缩,给CPU 减负
--wiht-http_flv_modle        ==>可以在向客户端返回响应肘,对FLV 格式的视频文件在header 头做一些处理,使得客户端可以观看、拖动FLV 视频
--with-http_mp4_module        ==>使客户端可以观看、拖动MP4 视频
--http-client-body-temp-path=/var/tmp/nginx/client        ==>set path to store http client request body temporary files
--http-proxy-temp-path=/var/tmp/nginx/proxy        ==>Nginx 作为HTTP 反向代理服务器时,上游服务器产生的HTTP 包体在需要临时存放到磁盘文件时,这样的临时文件将放到该路径下;默认<prefix>/proxy _temp
--http-fastcgi-temp-path=/var/tmp/nginx/fastcgi        ==>Fastcgi 所使用临时文件的放置目;默认<prefix>/fastcgi_temp      
# make && make install
 
给nginxSysV脚本,修改程序安装路径、pidfile、lockfile路径
NGINX_CONF_FILE="/etc/nginx/nginx.conf"        ==>SysV脚本中配置文件位置修改
  1. #!/bin/sh
  2. #
  3. # nginx - this script starts and stops the nginx daemon
  4. #
  5. # chkconfig: - 85 15
  6. # description: Nginx is an HTTP(S) server, HTTP(S) reverse \
  7. # proxy and IMAP/POP3 proxy server
  8. # processname: nginx
  9. # config: /etc/nginx/nginx.conf
  10. # config: /etc/sysconfig/nginx
  11. # pidfile: /var/run/nginx.pid
  12. # Source function library.
  13. ./etc/rc.d/init.d/functions
  14. # Source networking configuration.
  15. ./etc/sysconfig/network
  16. # Check that networking is up.
  17. ["$NETWORKING"="no"]&& exit 0
  18. nginx="/usr/local/nginx/sbin/nginx"
  19. prog=$(basename $nginx)
  20. pidfile="/var/run/nginx/nginx.pid"
  21. NGINX_CONF_FILE="/etc/nginx/nginx.conf"
  22. [-f /etc/sysconfig/nginx ]&&./etc/sysconfig/nginx
  23. lockfile=/var/lock/nginx.lock
  24. make_dirs(){
  25. # make required directories
  26. options=`$nginx -V 2>&1 | grep ‘configure arguments:‘`
  27. for opt in $options;do
  28. if[`echo $opt | grep ‘.*-temp-path‘`];then
  29. value=`echo $opt | cut -d "=" -f 2`
  30. if[!-d "$value"];then
  31. # echo "creating" $value
  32. mkdir -p $value && chown -R $user $value
  33. fi
  34. fi
  35. done
  36. }
  37. start(){
  38. [-x $nginx ]|| exit 5
  39. [-f $NGINX_CONF_FILE ]|| exit 6
  40. make_dirs
  41. echo -n $"Starting $prog: "
  42. daemon $nginx -c $NGINX_CONF_FILE
  43. retval=$?
  44. echo
  45. [ $retval -eq 0]&& touch $lockfile
  46. return $retval
  47. }
  48. stop(){
  49. echo -n $"Stopping $prog: "
  50. killproc $prog -QUIT
  51. retval=$?
  52. echo
  53. [ $retval -eq 0]&& rm -f $lockfile
  54. return $retval
  55. }
  56. restart(){
  57. configtest ||return $?
  58. stop
  59. sleep 1
  60. start
  61. }
  62. reload(){
  63. configtest ||return $?
  64. echo -n $"Reloading $prog: "
  65. killproc $nginx -HUP
  66. RETVAL=$?
  67. echo
  68. }
  69. force_reload(){
  70. restart
  71. }
  72. configtest(){
  73. $nginx -t -c $NGINX_CONF_FILE
  74. }
  75. rh_status(){
  76. rh_status_q(){
  77. rh_status >/dev/null 2>&1
  78. }
  79. case"$1"in
  80. start)
  81. rh_status_q && exit 0
  82. $1
  83. ;;
  84. stop)
  85. rh_status_q || exit 0
  86. $1
  87. ;;
  88. restart|configtest)
  89. $1
  90. ;;
  91. reload)
  92. rh_status_q || exit 7
  93. $1
  94. ;;
  95. force-reload)
  96. force_reload
  97. ;;
  98. status)
  99. rh_status
  100. ;;
  101. condrestart|try-restart)
  102. rh_status_q || exit 0
  103. ;;
  104. *)
  105. echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"
  106. exit 2
  107. esac
# chmod +x /etc/rc.d/init.d/nginx        ==>在路径下添加的Sys脚本赋予执行权限
# ss -tnl        ==>确认80端口无人占用
# service nginx start
# /usr/local/nginx/sbin/nginx -t        ==>测试配置文件,需要创建某些文件夹
# cd /usr/local/nginx/html        ==>主页目录

二、虚拟主机

虚拟主机相关的配置:
1、server{}        ==>定义一个虚拟主机
2、listen        ==>监听的端口,
        listen address[:port][default_server] ssl 
        backlog=number:指明TCP协议backlog队列的大小。默认为-1,表示不设置。在TCCp建立三次握手过程中,进程还没有开始处理监听句柄,这时backlog队列将会放置这些新连接。可如果backlog队列已满,还有新的客户端试图通过三次握手建立TCP连接,这时客户端会建立连接失败。
        rcvbuf=size:设定监听的句柄的SO_RCVBUF参数;接收缓冲大小
        sndbuf=size:设定监听句柄的SO_SNDBUF参数
        deferred:用户发起建立连接请求,并且完成了TCP三次握手,内核也不会为了这次的连接调度worker进程来处理,只有用户真发送请求数据时(内核已经在网卡中收到请求数据包)内核才会唤醒worker进程处理这个连接。这个参数使用于大并发的情况,它减 轻了worker进程的负担。当请求数据来临时,worker进程才会开始处理这个连接。只有确认上面所说的应用场景复合自己的业务需求时,才可以使用它。
        bind:绑定当前端口/地址对,如127.0.0.1:8000。只有同时对一个端口监听多个地址时才会生效。         
        ssl:在当前监听的端口上建立的连接必须基于SSL协议    
 
3、server_name name [...];        ==>在开始处理一个HTTP请求时,Nginx会取出head头中的Host,与每个server中的server_name进行匹配,以此决定哪个server块来处理这个请求。服务器名,后可跟多个主机;名称还可以使用通配符和正则表达式(~匹配);
        (1)先做精确匹配;www.magedu.com
        (2)左侧通配符匹配;*.magedu.com
        (3)右侧通配符匹配;www.*
        (4)正则表达式匹配,~^.*\.magedu\.com$
        (5)如果Host与server_name都不匹配,优先选择listen选项后加入[default | default_server]的server块,找到匹配listen端口的第一个server块
        (6)server_name"":表示匹配没有Host这个HTTP头部的请求
 
4、location [=|~|~*|^~]/url {...}或location @name       ==>允许根据用户请求的URI来匹配定义的各location,匹配到时此请求将被相应的location块中的配置所处理
        =:精确匹配检查
        ^~:URI的前半部分匹配,不检查正则表达式
        ~:正则表达式模式匹配,区分字符大小写
        ~*:正则表达式模式匹配,不区分字符大小写
 
        匹配优先级:精确匹配=、^~、~、~*、由不带符号的URL进行左侧匹配
5、root        ==>设置web资源路径映射;用于指明请求的URL所对应的文档的目录路径;也可以用于loction或server中   
技术分享
技术分享
技术分享
6、alias path        ==>用于location配置段,定义路径别名
技术分享
技术分享
技术分享
         
        注意:root表示指明路径为对应location的"/"URL;alias表示路径映射,即location中的URL是相对alias所指明的路径而言
7、index file        ==>默认主页  index index.html
 
8、error_page code [...] [=code]URI | @name
        根据http状态码重定向错误页面
        =[code]:以指定的响应码进行响应;省略code以新请求的资源状态码为响应码
        error_page 404 /404.html
技术分享
技术分享
技术分享
 
9、try_files
        try_files path1[,path2...] URI 

三、常用配置

1、基于IP的访问控制:ngx_http_access_module
Syntax:        allow|deny address | CIDR | unix: | all;
Default:        —
Context:       http, server, location, limit_except
         技术分享
允许192.168.1.0/24网段除了192.168.1.1的主机,允许10.1.1.0/16和IPv6的2001:0db8::/32,并拒绝所有
规则范围从小到大,从上往下匹配
 
2、基于用户的basic认证:ngx_http_auth_basic_module
Syntax:        auth_basic string | off;
Default:       auth_basic off;
Context:       http, server, location, limit_except
        技术分享
# htpasswd -c /usr/local/nginx/users/htpasswd status        ==>在/usr/local/nginx/users用httpd的密码生成工具生成密码
 
3、基于gzip实现响应报文压缩:ngx_http_gzip_module
        gzip on | off;        ==>启用和关闭gzip压缩;默认关闭
        gzip_buffers number size;        ==>压缩是buffer的大小和个数;默认gzip_buffers 32 4k|16 8k    
        gzip_comp_level level;        ==>压缩级别,默认为1
        gzip_disable regex ...;        ==>哪些不进行压缩
        gzip_min_length length;        ==>最小多大的包可以压缩;默认为20字节
        gzip_http_version 1.0 | 1.1;        ==>协议;默认1.1
        gzip_proxied off | expired | no-cache | no-store | private | no_last_modified | no_etag | auth | any ...;        ==>默认关闭
        gzip_types mime-type ...;        ==>对那种压缩;默认 gzip_types text/html;
        gzip_vary on | off;        ==>Accept-Encoding;默认关闭
 
4、定制响应首部:ngx_http_headers_module
这个模块允许设置任意的HTTP头。这个模块主要是处理浏览器的本地缓存,通过这个输出HTTP Headers Response,让浏览器如何处理本地缓存
expires仅仅适用于200, 204, 301, 302,和304应答

  add_header name value [always];
  expires

 

5、定制访问日志:ngx_http_log_module
Syntax:        access_log path [format [buffer=size [flush=time]] [if=condition]];
                    access_log path format gzip[=level] [buffer=size] [flush=time] [if=condition];
                    access_log syslog:server=address[,parameter=value] [format [if=condition]];
                    access_log off;
Default:        access_log logs/access.log combined;
Context:       http, server, location, if in location, limit_except
定制出于httpd的combined格式相同的日志内容
技术分享
 
6、定义合法引用:ngx_http_referer_module
        技术分享
none:直接输入网址打开的,允许引用
blocked:有首部没有值;如”http://”或“https://”;允许引用
server_names:如上图中的红框中所能匹配到的主机,允许引用
 
7、URL重写:ngx_http_rewrite_module
rewrite regex replacement [flag];
        flag参数含义:
        (1)last:无需客户端重发请求,在服务端重新检查规则
        (2)break:无需客户端重发请求,不检查规则直接响应给客户端,避免循环重写
        (3)redirect:返回一个临时重定向代码302,让客户端重新发请求
        (4)permanent:返回一个永久重定向代码301,让客户端重新发请求                
        if (condition) { ... } 
                =:等于
                !=:不等于
                ~:匹配模式,区分大小写的匹配
                ~*:匹配模式,不区分大小写的匹配
                !~:不匹配模式则为真,匹配则为假,区分大小写
                !~*:不匹配模式则为真,匹配则为假,不区分大小写
                -f | !-f:是否存在且是文件
                -d | !-d:是否存在且是目录
                -e | !-e:是否存在
                -x | !-x:是否存在且可执行
                如果正则表达式中包含"}" 或":" 则需要用单引号或双引号括起来
 
        return code [text];         
        return code URL;
        return URL;
                返回响应代码或其它的响应正文,响应正文或重定向的URL可以包含变量
           
        set $variable value;      ==>设定一个自定义变量  
            
8、ngx_http_stub_status_module
 
技术分享
技术分享
        active conections:活动连接数。
        acceept:已接收的
        hander:已处理的      
        request:总共处理的请求数
        reading:正在接收客户端请求      c->s 
        write:正在发送响应,s->c
        wating:空闲的客户端连接
 
9、https:ngx_http_ssl_module
# cd /etc/pki/CA/private/
# (umask 077;openssl genrsa -out cakey.pem 4096)
# openssl req -new -x509 -key cakey.pem -out cacert.pem -days 3656
#  mv cacert.pem ../
# touch {index.txt;serial}
# echo "01" > serial
 
# mkdir /etc/nginx/certs/
cd /etc/nginx/certs/
#  (umaks 077;openssl genrsa -out nginx.ley 2048)
openssl req -new -key nginx.key -out nginx.csr
# openssl ca -in nginx.csr -out nginx.pem
·技术分享
技术分享

编译安装Nginx及基本配置

标签:

原文地址:http://www.cnblogs.com/kwstars/p/994f548db590b28ad716492c45db8d40.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!