Linux下安装Nginx
如果yum install gcc-c++就出错了,说明yum源不对,执行:
curl -o /etc/yum.repos.d/CentOS-Base.repo https://www.xmpan.com/Centos-6-Vault-Aliyun.repo
./configure --prefix=/opt/nginx-1-13 表示将源码编译后放在nginx-1-13目录下,所以在这步操作前,如果没有这个目录要先创建这个目录。
Linux下Nginx命令
Nginx作静态资源服务器
像图片,js,css等静态文件就放在static目录下,直接由nginx返回,这样效率更高。
具体配置:
重启Nginx:./nginx -s reload
然后,把我的静态资源index目录传到/usr/local/nginx目录下面,同conf,html,sbin目录同级
这样,默认访问ip地址时,就会访问/usr/local/nginx/index/index.html页面了
Nginx配置虚拟主机
绑定端口
1. 将/资料/静态页面/index目录上传至 /usr/local/nginx/index下
将/资料/静态页面/regist目录上传至 /usr/local/nginx/regist下
2. 修改Nginx 的配置文件:/usr/local/nginx/conf/nginx.conf
server { listen 81; # 监听的端口 server_name localhost; # 域名或ip location / { # 访问路径配置 root index; # 根目录 index index.html index.htm; # 默认首页 } error_page 500 502 503 504 /50x.html; # 错误页面 location = /50x.html { root html; } } server { listen 82; # 监听的端口 server_name localhost; # 域名或ip location / { # 访问路径配置 root regist; # 根目录 index regist.html; # 默认首页 } error_page 500 502 503 504 /50x.html; # 错误页面 location = /50x.html { root html; } } |
3.测试访问
地址栏输入http://192.168.177.129/:81 可以看到首页面
地址栏输入http://192.168.177.129/:82 可以看到注册页面
绑定域名
一个域名对应一个 ip 地址,一个 ip 地址可以被多个域名绑定。
本地测试可以修改 hosts 文件(C:\Windows\System32\drivers\etc)
可以配置域名和 ip 的映射关系,如果 hosts 文件中配置了域名和 ip 的对应关系,不需要走dns 服务器。
192.168.177.129 www.hmtravel.com
192.168.177.129 regist.hmtravel.com
做好域名指向后,修改nginx配置文件
server { listen 80; server_name www.hmtravel.com; location / { root cart; index cart.html; } } server { listen 80; server_name regist.hmtravel.com; location / { root search; index search.html; } } |
执行以下命令,刷新配置
[root@localhost sbin]# ./nginx -s reload
测试:
地址栏输入http://www.hmtravel.com/ 进入搜索页面
地址栏输入http://regist.hmtravel.com/ 进入注册页面
Nginx反向代理
upstream tomcat-travel{ server 192.168.177.129:8080; } server { listen 80; # 监听的端口 server_name www.hmtravel.com; # 域名或ip location / { # 访问路径配置 # root index;# 根目录 proxy_pass http://tomcat-travel; index index.html index.htm; # 默认首页 } } |
Nginx的反向代理缓存
# proxy_cache_path 设置缓存目录
# keys_zone 设置共享内存以及占用空间大小
# max_size 设置缓存大小
# inactive 超过此时间则被清理
# use_temp_path 临时目录,使用后会影响nginx性能
proxy_cache_path /usr/local/nginx/upstream_cache keys_zone=mycache:5m max_size=1g inactive=1m use_temp_path=off
location / {
proxy_pass http://tomcats;
# 启用缓存,和keys_zone一致
proxy_cache mycache;
# 针对200和304状态码缓存时间为8小时
proxy_cache_valid 200 304 8h;
}
集群负载均衡配置
server {
listen 80; # 监听的端口
server_name www.hmtravel.com; # 域名或ip
location / { # 访问路径配置
proxy_pass http://tomcat-travel;
}
}
upstream tomcat-travel{
#weight表示权重,可以不配置,默认都是1:1:1,当8080端口配置为2后,则表示8080端口负载50%,8081和8082各负载25%;max_fails=1 fail_timeout=60s表示高可用,访问失败一次后,过60秒后再次访问;
server 192.168.177.129:8080 weight=2;
server 192.168.177.129:8081 max_fails=1 fail_timeout=60s;
server 192.168.177.129:8082 max_fails=1 fail_timeout=60s;
}
upstream指令参数
max_conns设置单台tomcat最大连接数
down、backup
max_fails、fail_timeout
Keepalived 提高吞吐量
日志切割
Nginx日志按每分钟一个日志文件的切割脚本如下:
新建shell脚本:
vi /opt/nginx/nginx_log.sh
#!/bin/bash
#设置日志文件存放目录
LOG_HOME="/opt/nginx/logs/"
#备分文件名称
LOG_PATH_BAK="$(date -d yesterday +%Y%m%d%H%M)".access.log
#重命名日志文件
mv ${LOG_HOME}/access.log ${LOG_HOME}/${LOG_PATH_BAK}.log
#向nginx主进程发信号重新打开日志
kill -USR1 `cat /opt/nginx/logs/nginx.pid`
创建Nginx定时任务,每隔一分钟执行一下上面的脚本:
crontab -e
输入:*/1 * * * * sh /opt/nginx/nginx_log.sh
然后重启定时任务:service crond restart
然后cd 到 logs下面看日志文件,就会一分钟产生一个日志文件。
Nginx文件压缩传输配置
#gzip模块设置
#开启压缩
gzip on;
# 设置允许压缩的页面最小字节数,页面字节数从header头得content-length中进行获取。
默认值是0,不管页面多大都压缩。建议设置成大于2k的字节数,小于2k可能会越压越大。
gzip_min_length 2k;
# 设置系统获取几个单位的缓存用于存储gzip的压缩结果数据流。 例如 4 4k 代表以4k为单
位,按照原始数据大小以4k为单位的4倍申请内存。 4 8k 代表以8k为单位,按照原始数据大小以8k
为单位的4倍申请内存。
# 如果没有设置,默认值是申请跟原始数据相同大小的内存空间去存储gzip压缩结果。
gzip_buffers 4 16k;
#压缩级别,1-10,数字越大压缩的越好,也越占用CPU时间
gzip_comp_level 5;
# 默认值: gzip_types text/html (默认不对js/css文件进行压缩)
# 压缩类型,匹配MIME类型进行压缩
# 不能用通配符 text/*
# (无论是否指定)text/html默认已经压缩
# 设置哪压缩种文本文件可参考 conf/mime.types
gzip_types text/plain application/x-
javascript text/css application/xml;
# 值为1.0和1.1 代表是否压缩http协议1.0,选择1.0则1.0和1.1都可以压缩
gzip_http_version 1.0
# IE6及以下禁止压缩
gzip_disable "MSIE [1-6]\.";
# 默认值:off
# Nginx作为反向代理的时候启用,开启或者关闭后端服务器返回的结果,匹配的前提是后端服
务器必须要返回包含"Via"的 header头。
# off - 关闭所有的代理结果数据的压缩
# expired - 启用压缩,如果header头中包含 "Expires" 头信息
# no-cache - 启用压缩,如果header头中包含 "Cache-Control:no-cache" 头信息
# no-store - 启用压缩,如果header头中包含 "Cache-Control:no-store" 头信息
# private - 启用压缩,如果header头中包含 "Cache-Control:private" 头信息
# no_last_modified - 启用压缩,如果header头中不包含 "Last-Modified" 头信息
# no_etag - 启用压缩 ,如果header头中不包含 "ETag" 头信息
# auth - 启用压缩 , 如果header头中包含 "Authorization" 头信息
# any - 无条件启用压缩
gzip_proxied expired no-cache no-store private auth;
# 给CDN和代理服务器使用,针对相同url,可以根据头信息返回压缩和非压缩副本
gzip_vary on;
Nginx配置进程数,并发数
Nginx安全配置
基于Nginx分布式限流
# 根据IP地址限制速度 # 1) 第一个参数 $binary_remote_addr # binary_目的是缩写内存占用,remote_addr表示通过IP地址来限流 # 2) 第二个参数 zone=iplimit:20m # iplimit是一块内存区域(记录访问频率信息),20m是指这块内存区域的大小 # 3) 第三个参数 rate=1r/s # 比如100r/m,标识访问的限流频率 limit_req_zone $binary_remote_addr zone=iplimit:20m rate=1r/s; # 根据服务器级别做限流 limit_req_zone $server_name zone=serverlimit:10m rate=100r/s; # 基于连接数的配置 limit_conn_zone $binary_remote_addr zone=perip:20m; limit_conn_zone $server_name zone=perserver:20m; server { server_name www.imooc-training.com; location /access-limit/ { proxy_pass http://127.0.0.1:10086/; # 基于IP地址的限制 # 1) 第一个参数zone=iplimit => 引用limit_req_zone中的zone变量 # 2) 第二个参数burst=2,设置一个大小为2的缓冲区域,当大量请求到来。 # 请求数量超过限流频率时,将其放入缓冲区域 # 3) 第三个参数nodelay=> 缓冲区满了以后,直接返回503异常 limit_req zone=iplimit burst=2 nodelay; # 基于服务器级别的限制 # 通常情况下,server级别的限流速率是最大的 limit_req zone=serverlimit burst=100 nodelay; # 每个server最多保持100个连接 limit_conn perserver 100; # 每个IP地址最多保持1个连接 limit_conn perip 5; # 达到限流条件抛出异常,返回504(默认是503) limit_req_status 504; limit_conn_status 504; } }
Nginx跨域请求
静态资源防盗链
Nginx使用过程中可能遇到的问题