Linux学习之路-Nginx安装及配置文件篇23---20180210
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux学习之路-Nginx安装及配置文件篇23---20180210相关的知识,希望对你有一定的参考价值。
一、nginx的安装方法及配置介绍
1、yum安装
官方:
http://nginx.org/packages/centos/7/x86_64/RPMS
Fedora-EPEL:
https://mirrors.aliyun.com/epel/7/x86_64/
官方yum源
[nginx]
name=nginx_repo
baseurl=http://nginx.org/packages/centos/7/x86_64/
gpgcheck=0
enabled=1
2、编译安装
yum install pcre-devel openssl-devel zlib-devel
useradd -r nginx
./configure --prefix=/usr/local/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-http_dav_module --with-http_stub_status_module --with-threads --with-file-aio
make && make install
3、编译安装选项简要介绍
--prefix=/etc/nginx 安装路径
--sbin-path=/usr/sbin/nginx 指明nginx程序文件安装路径
--conf-path=/etc/nginx/nginx.conf 主配置文件安装位置
--error-log-path=/var/log/nginx/error.log 错误日志文件安装位置
--http-log-path=/var/log/nginx/access.log 访问日志文件安装位置
--pid-path=/var/run/nginx.pid 指明pid文件安装位置
--lock-path=/var/run/nginx.lock 锁文件安装位置
--http-client-body-temp-path=/var/cache/nginx/client_temp 客户端body部分的临时文件存放路径,如果服务器允许客户端使用put方法提交大数据时,临时存放的磁盘路径
--http-proxy-temp-path=/var/cache/nginx/proxy_temp 作为代理服务器,服务器响应报文的临时文件存放路径
--http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp 作为fastcgi代理服务器,服务器响应报文的临时文件存放路径
--http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp 作为uwsgi代理服务器,服务器响应报文的临时文件存放路径
--http-scgi-temp-path=/var/cache/nginx/scgi_temp 作为scgi反代服务器,服务器响应报文的临时文件存放路径
--user=nginx 指明以那个身份运行worker进程,主控master进程一般由root运行
--group=nginx
--with-http_ssl_module 表示把指定模块编译进来
[[email protected]~]#nginx -v nginx version: nginx/1.12.2 [[email protected]~]#nginx -V #yum安装的配置参数 nginx version: nginx/1.12.2 built by gcc 4.4.7 20120313 (Red Hat 4.4.7-18) (GCC) built with OpenSSL 1.0.1e-fips 11 Feb 2013 TLS SNI support enabled configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -fPIC' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -pie'
4、Nginx目录结构和命令
ls /usr/local/nginx/ #这个是编译路径
html是测试页,sbin是主程序
ls /usr/local/nginx/sbin/ #这个是编译路径
nginx 只有一个程序文件
ls /usr/local/nginx/html/ #这个是编译路径
50x.html index.html 测试网页
Nginx:默认为启动nginx
-h 查看帮助选项
-V 查看版本和配置选项
-t 测试nginx语法错误
-c filename 指定配置文件(default: /etc/nginx/nginx.conf)
-s signal 发送信号给master进程,signal可为:stop, quit, reopen, reload
示例:-s stop 停止nginx -s reload 加载配置文件
-g directives 在命令行中指明全局指令
[[email protected]~]#nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful [[email protected]~]#nginx -h nginx version: nginx/1.12.2 Usage: nginx [-?hvVtTq] [-s signal] [-c filename] [-p prefix] [-g directives] Options: -?,-h : this help -v : show version and exit -V : show version and configure options then exit -t : test configuration and exit -T : test configuration, dump it and exit -q : suppress non-error messages during configuration testing -s signal : send signal to a master process: stop, quit, reopen, reload -p prefix : set prefix path (default: /etc/nginx/) -c filename : set configuration file (default: /etc/nginx/nginx.conf) -g directives : set global directives out of configuration file [[email protected]~]#rpm -ql nginx #yum安装的配置路径 /etc/logrotate.d/nginx /etc/nginx /etc/nginx/conf.d /etc/nginx/conf.d/default.conf /etc/nginx/fastcgi_params /etc/nginx/koi-utf /etc/nginx/koi-win /etc/nginx/mime.types /etc/nginx/modules /etc/nginx/nginx.conf /etc/nginx/scgi_params /etc/nginx/uwsgi_params /etc/nginx/win-utf /etc/rc.d/init.d/nginx /etc/rc.d/init.d/nginx-debug /etc/sysconfig/nginx /etc/sysconfig/nginx-debug /usr/lib64/nginx /usr/lib64/nginx/modules /usr/sbin/nginx /usr/sbin/nginx-debug /usr/share/doc/nginx-1.12.2 /usr/share/doc/nginx-1.12.2/COPYRIGHT /usr/share/man/man8/nginx.8.gz /usr/share/nginx /usr/share/nginx/html /usr/share/nginx/html/50x.html /usr/share/nginx/html/index.html /var/cache/nginx /var/log/nginx
5、Nginx配置文件介绍
配置文件的组成部分:
主配置文件:nginx.conf
子配置文件 include conf.d/*.conf
fastcgi, uwsgi,scgi等协议相关的配置文件
mime.types:支持的mime类型
主配置文件的配置指令:
directive value [value2 ...];
注意:
(1) 指令必须以分号结尾
(2) 支持使用配置变量
内建变量:由Nginx模块引入,可直接引用
自定义变量:由用户使用set命令定义
set variable_name value;
引用变量:$variable_name
官网查询帮助:http://nginx.org/en/docs/
6、主配置文件结构
#主配置文件结构:四部
main block: #主配置段,即全局配置段,对http,mail都有效
event {
...
} #事件驱动相关的配置
http {
...
} #http/https #协议相关配置段
mail {
...
} #mail #协议相关配置段
stream {
...
} #stream #服务器相关配置段
7、http协议相关的配置结构
http {
...
... #各server的公共配置
server { #每个server用于定义一个虚拟主机
...
}
server {
...
server_name #虚拟主机名
root #主目录
alias #路径别名
location [OPERATOR] URL { #指定URL的特性
...
if CONDITION {
...
}
}
}
}
二、Nginx配置
Main 全局配置段常见的配置指令分类
正常运行必备的配置
优化性能相关的配置
用于调试及定位问题相关的配置
事件驱动相关的配置
帮助文档
http://nginx.org/en/docs/
1、正常运行必备的配置
帮助文档:http://nginx.org/en/docs/ngx_core_module.html
1、user
Syntax: user user [group];
Default: user nobody nobody;
Context: main
指定worker进程的运行身份,如组不指定,默认和用户名同名
2、pid /PATH/TO/PID_FILE
指定存储nginx主进程PID的文件路径
3、include file | mask
指明包含进来的其它配置文件片断
4、load_module file
模块加载配置文件:/usr/share/nginx/modules/*.conf
指明要装载的动态模块路径: /usr/lib64/nginx/modules
[[email protected]]#cat nginx.conf user nginx; worker_processes 1; #worker的数量,建议小于cpu的数量 error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; events { worker_connections 1024; #每个worker最大连接数 } http { include /etc/nginx/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 /var/log/nginx/access.log main; sendfile on; #tcp_nopush on; keepalive_timeout 65; #gzip on; include /etc/nginx/conf.d/*.conf; } [[email protected]]#ps aux root 16773 0.0 0.1 45200 1056 ? Ss 22:40 0:00 nginx: master process nginx nginx 16774 0.0 0.1 45584 1784 ? S 22:40 0:00 nginx: worker process [[email protected]]#pstree -p | grep nginx |-nginx(16773)---nginx(16774) [[email protected]]#cat /var/run/nginx.pid #存放的是master的进程编号 16773 [[email protected]]#ll total 40 drwxr-xr-x 2 root root 4096 Mar 7 22:13 conf.d drwxr-xr-x 2 root root 4096 Oct 31 2016 default.d -rw-r--r-- 1 root root 1007 Oct 17 21:25 fastcgi_params -rw-r--r-- 1 root root 2837 Oct 17 21:25 koi-utf -rw-r--r-- 1 root root 2223 Oct 17 21:25 koi-win -rw-r--r-- 1 root root 3957 Oct 17 21:25 mime.types lrwxrwxrwx 1 root root 29 Mar 7 22:13 modules -> ../../usr/lib64/nginx/modules -rw-r--r-- 1 root root 643 Oct 17 21:21 nginx.conf -rw-r--r-- 1 root root 636 Oct 17 21:25 scgi_params -rw-r--r-- 1 root root 664 Oct 17 21:25 uwsgi_params -rw-r--r-- 1 root root 3610 Oct 17 21:25 win-utf [[email protected]~]#ulimit -n 1024 [[email protected]~]#ulimit -n 10240 [[email protected]~]#ulimit -a core file size (blocks, -c) 0 data seg size (kbytes, -d) unlimited scheduling priority (-e) 0 file size (blocks, -f) unlimited pending signals (-i) 3808 max locked memory (kbytes, -l) 64 max memory size (kbytes, -m) unlimited open files (-n) 10240 pipe size (512 bytes, -p) 8 POSIX message queues (bytes, -q) 819200 real-time priority (-r) 0 stack size (kbytes, -s) 10240 cpu time (seconds, -t) unlimited max user processes (-u) 3808 virtual memory (kbytes, -v) unlimited file locks (-x) unlimited #加载第三方模块操作 #1、下载第三方模块 [[email protected]]#wget http://mirrors.aliyun.com/epel/6/x86_64/Packages/n/nginx-mod-http-xslt-filter-1.10.2-1.el6.x86_64.rpm --2018-03-07 23:00:41-- http://mirrors.aliyun.com/epel/6/x86_64/Packages/n/nginx-mod-http-xslt-filter-1.10.2-1.el6.x86_64.rpm Resolving mirrors.aliyun.com... 202.108.249.220, 202.108.249.221, 123.125.18.87, ... Connecting to mirrors.aliyun.com|202.108.249.220|:80... connected. HTTP request sent, awaiting response... 200 OK Length: 16016 (16K) [application/x-redhat-package-manager] Saving to: “nginx-mod-http-xslt-filter-1.10.2-1.el6.x86_64.rpm” 100%[==================================================================>] 16,016 --.-K/s in 0.04s 2018-03-07 23:00:41 (387 KB/s) - “nginx-mod-http-xslt-filter-1.10.2-1.el6.x86_64.rpm” saved [16016/16016] [[email protected]]#rpm -qpl http://mirrors.aliyun.com/epel/6/x86_64/Packages/n/nginx-mod-http-xslt-filter-1.10.2-1.el6.x86_64.rpm warning: http://mirrors.aliyun.com/epel/6/x86_64/Packages/n/nginx-mod-http-xslt-filter-1.10.2-1.el6.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID 0608b895: NOKEY /usr/lib64/nginx/modules/ngx_http_xslt_filter_module.so /usr/share/nginx/modules/mod-http-xslt-filter.conf #调用模块的配置文件 [[email protected]]#cat /usr/share/nginx/modules/mod-http-xslt-filter.conf load_module "/usr/lib64/nginx/modules/ngx_http_xslt_filter_module.so"; #2、安装模块 [[email protected]]#rpm -ivh http://mirrors.aliyun.com/epel/6/x86_64/Packages/n/nginx-mod-http-xslt-filter-1.10.2-1.el6.x86_64.rpm Retrieving http://mirrors.aliyun.com/epel/6/x86_64/Packages/n/nginx-mod-http-xslt-filter-1.10.2-1.el6.x86_64.rpm warning: /var/tmp/rpm-tmp.WaMXQe: Header V3 RSA/SHA256 Signature, key ID 0608b895: NOKEY Preparing... ########################################### [100%] package nginx-mod-http-xslt-filter-1.10.2-1.el6.x86_64 is already installed #3、调用模块 [[email protected]]#vim /etc/nginx/nginx.conf load_module "/usr/lib64/nginx/modules/ngx_http_xslt_filter_module.so"; #在全局设置添加这句命令 #或者把这个/usr/share/nginx/modules/mod-http-xslt-filter.conf文件,拷贝到 /etc/nginx/conf.d/ 目录下
2、性能优化相关的配置
1、worker_processes number | auto
worker进程的数量;通常应该为当前主机的cpu的物理核心数
2、worker_cpu_affinity cpumask ...
worker_cpu_affinity auto [cpumask] 提高缓存命中率
CPU MASK: 00000001:0号CPU
00000010:1号CPU
10000000:8号CPU
worker_cpu_affinity 0001 0010 0100 1000;
worker_cpu_affinity 0101 1010;
3、worker_priority number
指定worker进程的nice值,设定worker进程优先级:[-20,20]
4、worker_rlimit_nofile number
worker进程所能够打开的文件数量上限,如65535
#实验:简单优化
#实验:设置cup与worker绑定 [[email protected]]#watch -n 0.5 ' ps axo cmd,pid,psr | grep nginx ' Every 0.5s: ps axo cmd,pid,psr | grep nginx Wed Mar 7 23:11:10 2018 nginx: master process nginx 16773 2 nginx: worker process 16774 3 nginx: worker process 16775 0 nginx: worker process 16776 1 nginx: worker process 16777 2 grep --color=auto nginx 16989 4 [[email protected]]#vim /etc/nginx/nginx.conf worker_processes auto; worker_cpu_affinity 0001 0010 0100 1000; #在全局里添加 [[email protected]]#watch -n 0.5 ' ps axo cmd,pid,psr | grep nginx ' Every 0.5s: ps axo cmd,pid,psr | grep nginx Wed Mar 7 23:11:10 2018 nginx: master process nginx 16773 2 nginx: worker process 16774 0 nginx: worker process 16775 1 nginx: worker process 16776 2 nginx: worker process 16777 3 grep --color=auto nginx 16989 4 #调整优先级 [[email protected]]#ps axo cmd,pid,psr,ni | grep nginx nginx: master process nginx 16773 0 0 nginx: worker process 16774 0 0 #默认就是0 grep nginx 17530 0 0 [[email protected]]#vim /etc/nginx/nginx.conf worker_priority -20 #在全局设置 [[email protected]]#ps axo cmd,pid,psr,ni | grep nginx nginx: master process nginx 16773 0 -20 nginx: worker process 16774 0 -20 #nice的优先级就是-20~19 grep nginx 17530 0 0 #提升线程 Syntax:worker_rlimit_nofile number; #官网翻译 Default:— Context:main Changes the limit on the maximum number of open files (RLIMIT_NOFILE) for worker processes. Used to increase the limit without restarting the main process. #提示不用重启服务,用于在不重新启动主进程的情况下增加限制 [[email protected]]#vim /etc/nginx/nginx.conf worker_rlimit_nofile 65530 这个要配合修改worker_connections 1024; 一起使用,几个worker乘以这个值,不要超出文件的最大上限 worker_connections 10240;
3、事件驱动相关的配置
events {
...
}
1、worker_connections number
每个worker进程所能够打开的最大并发连接数数量,如10240
总最大并发数:worker_processes * worker_connections
2、use method
指明并发连接请求的处理方法 ,默认自动选择最优方法
use epoll;
3、accept_mutex on | off 互斥
处理新的连接请求的方法;on指由各个worker轮流处理新请求,Off指每个新请求的到达都会通知(唤醒)所有的worker进程,但只有一个进程可获得连接,造成“惊群”,影响性能,默认on
Syntax:accept_mutex on | off; Default:accept_mutex off; Context:events If accept_mutex is enabled, worker processes will accept new connections by turn. Otherwise, all worker processes will be notified about new connections, and if volume of new connections is low, some of the worker processes may just waste system resources. There is no need to enable accept_mutex on systems that support the EPOLLEXCLUSIVE flag (1.11.3) or when using reuseport. Prior to version 1.11.3, the default value was on. #如果accept_mutex启用,工作进程将轮流接受新的连接。否则,所有工作进程都会收到有关新连接的通知, 并且如果新连接的数量很少,某些工作进程可能会浪费系统资源。 不需要accept_mutex 在支持EPOLLEXCLUSIVE标志(1.11.3)的系统 上启用或在使用复用端口时启用。 在版本1.11.3之前,默认值是on。
4、调试和定位问题
1、daemon on|off
是否以守护进程方式运行nignx,默认是守护进程方式
2、master_process on|off
是否以master/worker模型运行nginx;默认为on
off 将不启动worker(不建议关闭)
3、error_log file [level]
错误日志文件及其级别;出于调试需要,可设定为debug;但debug仅在编译时使用了“--with-debug”选项时才有效
方式:file /path/logfile;
stderr:发送到标准错误
syslog:server-address[,parameter=values]
发送到syslogmemory:size 内存
level:debug|info|notice|warn|error|crit|alter|emerg
5、http协议的相关配置
http {
... ...
server {
...
server_name
root
location [OPERATOR] /uri/ {
...
}
}
server {
...
}
}
[[email protected]]#vim nginx.conf
http {
include /etc/nginx/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 /var/log/nginx/access.log main;
sendfile on; #启用内核级封装
#tcp_nopush on;
keepalive_timeout 65; #持久连接,默认65秒
#gzip on; #压缩
include /etc/nginx/conf.d/*.conf; #包含的子配置文件
}
[[email protected]]#cat conf.d/default.conf
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
以上是关于Linux学习之路-Nginx安装及配置文件篇23---20180210的主要内容,如果未能解决你的问题,请参考以下文章
Linux学习之路-Nginx模块简要介绍篇26---20180222