设为首页 收藏本站
查看: 924|回复: 0

[经验分享] nginx基础及编译安装

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2014-9-22 09:45:10 | 显示全部楼层 |阅读模式
nginx是http服务器和反向代理服务器,又是IMAP/POP3/SMTP 代理服务器


nginx特性:
    基本功能:
        1、能够实现服务于静态文件,也就是静态资源的web服务器,能自动缓存打开的文件描述符;
        2、反向代理服务器,能够实现简单的负载均衡和冗余
        3、能够支持FastCGI协议
        4、有模块化话功能,但非DSO(动态装卸载)机制,支持多种过滤器gzip,SSI和完成图像大小调整等
        5、支持SSL功能
    扩展功能:
        1、能够基于名称和IP做虚拟主机
        2、支持keepalive
        3、支持平滑的配置更新或程序版本升级
        4、支持定制访问日志,支持使用日志缓存以提高性能
        5、支持url rewrite(地址重写)   
        6、支持路径别名
        7、支持基于IP及用户的认证
        8、支持速率限制,并发限制等

nginx的基本架构:
    是由一个master生成一个或多个worker结合工作,一个worker响应多个用户请求;基于事件驱动工作,有kqueue,epoll,/dev/poll(非事件驱动,是消息通知的有select,poll,rt singals);支持sendfile;支持AIO机制(异步IO);支持mmap

特性总结:nginx有非阻塞、事件驱动,一个master生成多个worker,一个worker响应多个用户请求的特性;master进程多用于平滑升级。

nginx的模块类别:
            核心模块
            标准http模块
            可选的http模块
            邮件模块
            第三方扩展模块

nginx的使用:
    安装方法:
        编译安装
        rpm安装:yum(epel源中)

    安装环境:
1
2
       # yum install Development Tools  Server Platform Developmengt
       # yum install pcre-devel




    nginx的配置文件:
            main配置段
             http配置段
                   http  {

                    }
        注:在配置参数需要以分号结尾,否则会认为是语法错误;#表示注释信息;配置语法格式: 参数名  配置值1[值2......]
        配置文件中支持使用变量:有模块内置变量和用户自定义变量(ser var_name value)

    nginx基本核心配置的类别:
        用于调试,定位问题;正常运行的必备配置;优化性能的配置;优化性能的配置;事件类的配置

    在nginx运行worker进程是以普通用户身份运行的,为nginx用户和nginx组;

使用示例:
编译安装示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
# get nginx-1.4.7.tar.gz  \\下载程序包
# tar xf nginx-1.4.7.tar.gz   \\解压程序包
# ./configure \
   
  --prefix=/usr/local/nginx \
  --error-log-path=/data/applogs/nginx/error.log \
  --http-log-path=/data/applogs/nginx/access.log \
  --pid-path=/var/run/nginx/nginx.pid \
  --lock-path=/var/lock/nginx.lock \
  --user=nginx \
  --group=nginx \
  --with-http_ssl_module \
  --with-http_flv_module \
  --with-http_stub_status_module \
  --with-http_gzip_static_module \ 客户端请求的临时目录
  --http-client-body-temp-path=/usr/local/nginx/client/  
  --http-proxy-temp-path=/usr/local/nginx/proxy/ \ 缓存上流目录
  --http-fastcgi-temp-path=/usr/local/nginx/fcgi/ \
  --http-uwsgi-temp-path=/usr/local/nginx/uwsgi \
  --http-scgi-temp-path=/usr/local/nginx/scgi \
  --with-pcre
# make && make install
# groupadd -r nginx
   \\创建组
# useradd -r -g nginx nginx    \\创建用户
# mkdir /var/tmp/nginx \\创建刚才指定模块的目录
nginx的启动路径:/usr/sbin/nginx
nginx的启动选项,使用/usr/sbin/nginx -h 查看;
        -t:表示检查配置文件信息
# vim /etc/rc.d/init.d/nginx  \\添加脚本启动服务文件
#!/bin/sh
#
# nginx - this script starts and stops the nginx daemon
#
# chkconfig: - 85 15
# description: Nginx is an HTTP(S) server, HTTP(S) reverse \
# proxy and IMAP/POP3 proxy server
# processname: nginx
# config: /etc/nginx/nginx.conf
# config: /etc/sysconfig/nginx
# pidfile: /var/run/nginx.pid
  
# Source function library.
. /etc/rc.d/init.d/functions
  
# Source networking configuration.
. /etc/sysconfig/network
  
# Check that networking is up.
[ "$NETWORKING" = "no" ] && exit 0
  
nginx="/usr/local/nginx/sbin/nginx"
prog=$(basename $nginx)
  
NGINX_CONF_FILE="/usr/local/nginx/nginx.conf"
  
[ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx
  
lockfile=/var/lock/subsys/nginx
  
make_dirs() {
   # make required directories
   user=`nginx -V 2>&1 | grep "configure arguments:" | sed 's/[^*]*--user=\([^ ]*\).*/\1/g' -`
   options=`$nginx -V 2>&1 | grep 'configure arguments:'`
   for opt in $options; do
       if [ `echo $opt | grep '.*-temp-path'` ]; then
           value=`echo $opt | cut -d "=" -f 2`
           if [ ! -d "$value" ]; then
               # echo "creating" $value
               mkdir -p $value && chown -R $user $value
           fi
       fi
   done
}
  
start() {
    [ -x $nginx ] || exit 5
    [ -f $NGINX_CONF_FILE ] || exit 6
    make_dirs
    echo -n $"Starting $prog: "
    daemon $nginx -c $NGINX_CONF_FILE
    retval=$?
    echo
    [ $retval -eq 0 ] && touch $lockfile
    return $retval
}
  
stop() {
    echo -n $"Stopping $prog: "
    killproc $prog -QUIT
    retval=$?
    echo
    [ $retval -eq 0 ] && rm -f $lockfile
    return $retval
}
  
restart() {
    configtest || return $?
    stop
    sleep 1
    start
}
  
reload() {
    configtest || return $?
    echo -n $"Reloading $prog: "
    killproc $nginx -HUP
    RETVAL=$?
    echo
}
  
force_reload() {
    restart
}
  
configtest() {
  $nginx -t -c $NGINX_CONF_FILE
}
  
rh_status() {
    status $prog
}
  
rh_status_q() {
    rh_status >/dev/null 2>&1
}
  
case "$1" in
    start)
        rh_status_q && exit 0
        $1
        ;;
    stop)
        rh_status_q || exit 0
        $1
        ;;
    restart|configtest)
        $1
        ;;
    reload)
        rh_status_q || exit 7
        $1
        ;;
    force-reload)
        force_reload
        ;;
    status)
        rh_status
        ;;
    condrestart|try-restart)
        rh_status_q || exit 0
            ;;
    *)
        echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"
        exit 2
esac
# chmod +x /etc/rc.d/init.d/nginx  \\添加执行权限,然后就可以启动服务了
#  mkdir .vim/syntax -pv     \\ 因为在配置文件中没有显示语法高亮, 这里设置一下语法高亮,创建一个目录,用于 存放显示nginx配置文件语法高亮的程序包
# cd .vim/syntax
#get nginx.vim     \\下载名为nginx.vim的程序包
#vim filetype.vim     \\创建一个filetype的文件
au BufRead,BufNewFile /etc/nginx/*,/usr/local/nginx/conf/* if &ft == ' ' |        setfiletype nginx | endif   \\在filetype文件中添加此语句
# cd /etc/nginx
# vim nginx.conf     \\进入文件后便可发现语句已经高亮,下面为配置文件的内容;



正常运行的必备配置:
1
2
3
4
5
user nginx;
     \\指定运行worker进程的用户和组,格式:user username [groupname]
pid /path/to/pidfile_name;     \\指定nginx的pid文件
worker_rlimit_nofile # ;    \\表示指定一个worker进程所能够打开的最大文件句柄数
worker_rlimit_sigpending #;     \\表示设定每个用户能够发往worker进程的信号数量




优化性能相关的配置:
1
2
3
4
5
worker_processes #;      \\指定worker进程的个数,建议通常其数值应为CPU的物理核心数减1;对提高系统性能有很大帮助
worker_cpu_affinity cpumask....;    \\指定cpu掩码;cpu掩码是指当系统有几颗cpu的物理核心就会显示几个0,比如:当有四个时则显示为0000,当需要调用1颗cpu时则使用0001来表示,当需要调用2颗时,则使用0010表示;当需要调用3颗时,则使用0100表示;对提高系统性能有很大帮助
ssl_engine device;\\指定存在ssl硬件加速器的服务器上,指定所使用的ssl硬件加速设备;
timer_resolution t;     \\每次内核事件调用返回时,都会使用gettimeofday()来更新nginx缓存时钟;t表示时间值,每隔多长时间返回一次;timer_resolution用于定义每隔多久才会由gettimeofday()更新一次缓存时钟;在x86-64系统上,gettimeofday()代价已经很小,可以忽略此配置;但在较老的系统上可按使用情况设定
worker priority nice;    \\优先级,nice值为-20到19之间的值;对提高系统性能有很大帮助




事件相关的配置:
1
2
3
4
5
6
accept_mutex [on|off];    \\表示是否打开nginx负载均衡锁;会均衡请求到worker进程上;此锁能够让多个worker进程轮流的、序列化的与新的客户端建立连接;而通常当一个worker进程的负载达到其上限的7/8时,master就尽可能不再将请求调度到此worker上;默认为打开状态
lock_file /path/to/lock_file;    \\指定负载均衡锁文件;
accept_mutex_delay #ms;    \\使用accept锁模式中,一个worker进程为取得accept锁的等待时长;如果某个worker进程在某次试图取得锁时失败了,至少要等待#ms才能再一次请求锁;默认为500毫秒(ms)
multi_accept on|off;    \\是否允许一次性的响应多个用户请求;默认为off
use [epoll|rtsig|select|poll];    \\定义使用的事件模型,建议让nginx自动选择,默认为epoll
worker_connections #;    \\每个worker能够并发响应最大请求数;




用于调试、定位问题:只调试nginx时使用
1
2
3
daemon [on|off];    \\是否让nginx运行后台,默认为on,调试时可以设置off,使得所有信息去接输出控制台
master_process on|off;    \\是否以master/worker模式运行nginx,默认为on,调试时可设置为off以方便追踪
error_log /path/to/error_log level;    \\错误日志文件及其级别,默认为error级别;调试时可以使用debug级别,但要求在编译时必须使用--with-debug启用debug功能;




在nginx官网http://nginx.org中有更加详细的配置文件解释说明


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-25119-1-1.html 上篇帖子: nginx配置ssl注意事项 下篇帖子: nginx 基础知识解析
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表