nginx安装

打开nginx.org查看最近稳定版,以下链接查看最新nginx的yum repo:
http://nginx.org/en/linux_packages.html#stable

编辑/etc/yum.repo.d/nginx.repo填入以下内容:

1
2
3
4
5
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/OS/OSRELEASE/$basearch/
gpgcheck=0
enabled=1

Replace “OS” with “rhel” or “centos”, depending on the distribution used, and “OSRELEASE” with “6” or “7”, for 6.x or 7.x versions, respectively.

然后使用yum list |grep nginx
查看输出中是否含有nginx.x86_64
如果有说明nginx repo安装成功。

安装nginx
yum -y install nginx

##概述
nginx -v 查看nginx版本

rpm -ql 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
/etc/logrotate.d/nginx  #nginx日志轮转,用于logratate服务的日志切割
/etc/nginx #nginx主配置文件
/etc/nginx/conf.d #nginx主配置文件
/etc/nginx/conf.d/default.conf #nginx默认配置文件
/etc/nginx/fastcgi_params #cgi配置相关
/etc/nginx/koi-utf #编码转换文件,映射转换文件
/etc/nginx/koi-win #编码转换文件,映射转换文件
/etc/nginx/mime.types #设置http协议的Content-Type与扩展名对应关系(nginx处理无法识别的扩展名时读取该文件)
/etc/nginx/modules #nginx模块目录
/etc/nginx/nginx.conf #nginx主配置文件
/etc/nginx/scgi_params #cgi配置相关
/etc/nginx/uwsgi_params #cgi配置相关
/etc/nginx/win-utf #编码转换文件,映射转换文件
/etc/sysconfig/nginx # 配置系统守护进程管理器管理方式
/etc/sysconfig/nginx-debug # 配置系统守护进程管理器管理方式
/usr/lib/systemd/system/nginx-debug.service # 配置系统守护进程管理器管理方式
/usr/lib/systemd/system/nginx.service # 配置系统守护进程管理器管理方式
/usr/lib64/nginx
/usr/lib64/nginx/modules #nginx模块目录
/usr/libexec/initscripts/legacy-actions/nginx
/usr/libexec/initscripts/legacy-actions/nginx/check-reload
/usr/libexec/initscripts/legacy-actions/nginx/upgrade
/usr/sbin/nginx #nginx命令
/usr/sbin/nginx-debug #nginx命令
/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 #nginx缓存目录
/var/log/nginx #nginx日志

nginx -V 查看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
*#安装目录或路径*
--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

*#执行对应模块时,nginx所保留的临时文件*
--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

*#nginx启动的用户和用户组*
--user=nginx
--group=nginx

*#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

*#设置额外的参数将被添加到CFLAGS变量*
--with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fPIC'

*#设置附加的参数,链接系统库*
--with-ld-opt='-Wl,-z,relro -Wl,-z,now -pie'

nginx.conf

/etc/nginx/nginx.conf

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;#日志路径和格式

nginx变量

nginx请求变量

arg_PARAMETER、http_HRADER、sent_http_HEADER
比如$http_user_agent

nginx内置变量

http://nginx.org/en/docs/http/ngx_http_log_module.html#log_format

自定义变量

待添加

nginx模块

nginx官方模块和第三方模块

proxy_pass模块

语法:proxy_pass http://xxxx/yyy

正向代理:代理client
反向代理:代理server

负载均衡

通过proxy_pass转发到upstream server
upstream模块必须配置在server层以外

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
upstream name{
server 1.1.1.1:8881;
server x.nbma.info;
server 2.2.2.2 weight=5; #权重,需要设置加权轮询

server 3.3.3.3 backup; #备份节点

server 4.4.4.4 down; #不提供服务

server 5.5.5.5 max_fails=3; #允许请求失败的次数

server 6.6.6.6 fail_timeout=30; #重试时间

server 7.7.7.7 max_conn=500; #最大连接数
}

server {
location /{
proxy_pass http://name;
}
}

调度算法

1
2
3
4
5
6
7
upstream name{
ip_hash; #基于源IP hash
least_conn; #最小连接
hash $request_uri; #基于变量uri进行hash
server 1.1.1.1:8881;
server x.nbma.info;
}

rewrite规则

语法: rewrite regex replacement [flag];
位置:只能在server,location或者if内
例如

1
rewrite ^(.*)$ /pages/maintain.html break;

flag类型:

last: 停止rewrite检测,继续匹配rewrite之后的其他规则,服务器只收到一次请求
break: 停止rewrite检测,不在匹配rewrite之后的其他规则,直接去root目录
redirect: 返回302临时重定向,地址栏会显示跳转后的地址,服务器收到两次请求
permanent: 返回301永久重定向,地址栏会显示跳转后的地址,服务器收到两次请求,客户端会缓存这次跳转结果,之后跳转将由浏览器完成,无需经过服务器处理

常见的rewrite规则:

SEO优化

1
2
3
4
rewrite ^/course-(\d+)-(\d+)-(\d+)-\.html$ /course/$1/$2/$3.html break;

http://example.com/course-11-22-33.html
http://example.com/course/11/22/3.html

基于agent判断

1
2
3
if ($http_user_agent ~* Chrome) {
rewrite ^/nginx http://example.com/xxx break;
}

文件路径不存在,类似404

1
2
3
if (!-f $request_filename) {
rewrite ^(.*)$ http://example.com/xxx redirect;
}