nginx优势
1、支持5W高并发连接
2、内存消耗少
3、成本低
4、开源
下载
官网下载http://nginx.org/en/download.html
版本nginx-1.16.0
将文件上传至CentOS中/usr/local/nginx下并解压
tar -vzxf nginx-1.16.0.tar.gz
安装
1、安装到指定目录 (安装目录:/usr/local/nginx)
默认安装到/usr/local/nginx
./configure --prefix=/usr/local/nginx
2、执行安装命令
make & make install
3、启动停止
启动:默认为NGINX_HOME/conf/nginx.conf
./usr/local/nginx/sbin/nginx
也可指定nginx.conf文件启动,启动nginx -c 表示指定
./nginx -c /usr/local/nginx/conf/nginx.conf
发送信号的方式
kill -QUIT 进程号
kil -TERM 进程号
停止nginx
./nginx -s stop
退出nginx
./nginx -s quit
重新加载nginx.conf
./nginx -s reload
安装过程中若出现以下问题
缺少pcre的依赖
缺少openssl的依赖
yum install pcre-devel
yum install openssl-devel
yum install zlib-devel
Nginx核心配置
nginx的核心配置文件中的三个段
Main、 Event 、 Http
Nginx的日志配置
access_log日志记录
nginx中两个配置日志语句:log_format 设置日志格式 ; 另外是access_log
access_log 格式
logo声明 路径及文件名 日志标识
nginx日志切割
crontab
mv access.log access.log.20171206
kill -USR1 Nginx 主进程号 让nginx重新生成一个日志文件access.log
location的语法和匹配规则
location [~|=|^~|~*] /uri {
}
location的匹配规则
1、精准匹配
location=/uri{}
优先级最高的匹配规则
2、一般匹配
location /uri{
}
普通匹配的优先级要高于正则匹配
如果存在多个相同的前缀的一般匹配,最终会按照最大长度来做匹配
rewrite的使用
Rewrite通过ngx_http_rewrite_module模块支持url重写、支持if判断,但不支持else
rewrite功能,使用nginx提供的全局变量或自己设置的变量,结合正则表达式和标志位实现url重写以及重定向rewrite只能放在server{},location{},if{}中,并且只对域名后边的除去传递的参数外的字符串起作用
常用指令
If 空格 (条件) {设定条件进行重写}
条件的语法:
- “=” 判断相等,用于字符比较
- “~” 正则匹配(表示区分大小写),“~*” 不区分大小写
- “-f -d -e” 判断是否为文件、目录、是否存在
return 指令
语法:
return code;
停止处理并返回指定状态码给客户端。
if ($request_uri ~ *\.sh ){
return 403
}
set指令
语法:
set variable value;
定义一个变量并复制,值可以是文本、变量或者文本变量混合体
rewrite指令
语法:
rewrite regex replacement [flag]{
last / break/ redirect 返回临时302/ permant 返回永久302
}
last: 停止处理后续的rewrite指令集、 然后对当前重写的uri在rewrite指令集上重新查找
break: 停止处理后续的rewrite指令集 ,不会重新查找
如:
location /{
rewrite '^/images/([a-z]{3})/(.*)\.(png|jpg)$' /csdn?file=$2.$3;
set $image_file $2;
set $image_type $3;
}
location /csdn{
root html;
try_files /$arg_file /image404.html;
}
location =/image404.html{
return 404 "image not found exception";
}
如上配置:
/images/ttt/test.png 会重写到/csdn?file=test.png, 匹配到 location /csdn;
通过try_files获取存在的文件并进行返回。由于文件不存在所以直接返回404错误
rewrite匹配规则
表面看rewrite和location功能有点像,都能实现跳转,主要区别在于rewrite是在同一域名内更改获取资源的路径,而location是对一类路径做控制访问或反向代理,可以proxy_pass到其他机器。通常情况下rewrite也会写在location里,它们的执行顺序是:
- 执行server块的rewrite指令
- 执行location匹配
- 执行选定的location中的rewrite指令如果其中某步URI被重写,则重新循环执行1-3,直到找到真实存在的文件;循环超过10次,则返回500 Internal Server Error错误
浏览器本地缓存配置及动静分离
语法:
expires 60s|m|h|d
操作步骤
- 在html目录下创建一个images文件,在该文件中放一张图片
- 修改index.html, 增加
<img src=”图片”/>
- 修改nginx.conf配置。配置两个location实现动静分离,并且在静态文件中增加expires的缓存期限
Gzip压缩策略
浏览器请求 --> 告诉服务端当前浏览器可以支持压缩类型-->服务端会把内容根据浏览器所支持的压缩策略去进行压缩返回-->浏览器拿到数据以后解码;
常见的压缩方式:gzip、deflate 、sdch
server {
listen 80;
server_name localhost;
gzip on;
gzip_buffers 4 16k;
gzip_comp_level 7;
gzip_min_length 500;
gzip_types text/css text/xml application/javascript;
location /{
root html;
index index.html index.htm;
}
location ~ \.(png|jpg|js|css|gif)$ {
root html/images;
expires 5m;
}
}
是否开启gzip压缩
Gzip on|off
设置系统获取几个单位的缓存用于存储gzip的压缩结果数据流。
4 16k代表以16k为单位,安装原始数据大小以16k为单位的4倍申请内存。
Gzip_buffers 4 16k
压缩级别, 级别越高,压缩越小,但是会占用CPU资源
Gzip_comp_level[1-9]
正则匹配UA 表示什么样的浏览器不进行gzip
Gzip_disable
开始压缩的最小长度(小于多少就不做压缩)
Gzip_min_length
表示开始压缩的http协议版本
Gzip_http_version 1.0|1.1
nginx 做前端代理时启用该选项,表示无论后端服务器的headers头返回什么信息,都无条件启用压缩
Gzip_proxied
对那些类型的文件做压缩 (conf/mime.conf)
Gzip_type text/pliain,application/xml
是否传输gzip压缩标识
Gzip_vary on|off
注意点
- 图片、mp3这样的二进制文件,没必要做压缩处理,因为这类文件压缩比很小,压缩过程会耗费CPU资源
- 太小的文件没必要压缩,因为压缩以后会增加一些头信息,反而导致文件变大
- Nginx默认只对text/html进行压缩 ,如果要对html之外的内容进行压缩传输,需要手动来配置
Nginx反向代理
Proxy_pass
通过反向代理把请求转发到百度
server{
listen 80;
server_name www.csdn.net
location =/s {
proxy_pass http://www.baidu.com;
}
}
Proxy_pass 既可以是ip地址,也可以是域名,同时还可以指定端口
Proxy_pass指定的地址携带了URI,前面的配置[/s],那么这里的URI将会替换请求URI中匹配location参数部分;如上代码将会访问到http://www.baidu.com
负载均衡
upstream是Nginx的HTTP Upstream模块,这个模块通过一个简单的调度算法来实现客户端IP到后端服务器的负载均衡
Upstream常用参数介绍
语法:
server address [parameters]
其中关键字server必选。
address也必选,可以是主机名、域名、ip或unix socket,也可以指定端口号。
parameters是可选参数,可以是如下参数:
down:表示当前server已停用
backup:表示当前server是备用服务器,只有其它非backup后端服务器都挂掉了或者很忙才会分配到请求
weight:表示当前server负载权重,权重越大被请求几率越大。默认是1
max_fails和fail_timeout一般会关联使用,如果某台server在fail_timeout时间内出现了max_fails次连接失败,那么Nginx会认为其已经挂掉了,从而在fail_timeout时间内不再去请求它,fail_timeout默认是10s,max_fails默认是1,即默认情况是只要发生错误就认为服务器挂掉了,如果将max_fails设置为0,则表示取消这项检查。
upstream tomcatserver{
server 192.168.241.202:8080;
server 192.168.241.203:8080 weight=4;
}
ups支持的调度算法
ip_hash 根据ip的hash值来做转发
默认是轮询机制
权重 weight=x
fair 根据服务器的响应时间来分配请求
url_hash
示例(将202,203服务器进行负载均衡)
server{
listen 80;
server_name www.csdn.net
location =/s {
proxy_pass http://tomcatserver;
}
}
upstream tomcatserver{
server 192.168.241.202:8080;
server 192.168.241.203:8080 weight=4;
}
nginx卸载
进入/usr/local/nginx/sbin安装目录执行停止mingl
cd /usr/local/nginx
./nginx -s stop
查找根目录下包含nginx的文件并删除
find / -name nginx
rm -rf /文件路径或mv命令(建议)
nginx设置了开机启动处理
chkconfig nginx off
rm -rf /etc/init.d/nginx