Nginx 1.16.1安装
下载地址(下载 nginx-1.16.1.tar.gz)
https://nginx.org/en/download.html
配置yum基础依赖
# c++ 环境
yum install gcc-c++
#正则表达式库
yum install -y pcre pcre-devel
#在线压缩文件
yum install -y zlib zlib-devel
#ssl连接使用
yum install -y opensll openssl-devel
安装步骤
#解压 .tar.gz 后缀压缩包
tar -zxvf nginx-1.16.1.tar.gz
#创建临时目录(不创建的话,后续启动的时候会报错)
mkdir /var/temp/nginx -p
# --prefix 安装后的目录签章
# error-log-path 错误日志输入路径
# http-log-path 日志输出路径
#进入解压后的 nginx-1.16.1 目录下执行,执行后会在当前目录下出现一个 Makefile 文件
./configure \
--prefix=/usr/local/nginx \
--pid-path=/var/run/nginx/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/temp/nginx/client \
--http-proxy-temp-path=/var/temp/nginx/proxy \
--http-fastcgi-temp-path=/var/temp/nginx/fastcgi \
--http-uwsgi-temp-path=/var/temp/nginx/uwsgi \
--http-scgi-temp-path=/var/temp/nginx/scgi
#这两句是添加https相关的模块,如果nginx需要使用到那将这两句追加在最后面即可,下方有样例
#--with-http_stub_status_module \
#--with-http_ssl_module
#./configure \
#--prefix=/usr/local/nginx \
#--pid-path=/var/run/nginx/nginx.pid \
#--lock-path=/var/lock/nginx.lock \
#--error-log-path=/var/log/nginx/error.log \
#--http-log-path=/var/log/nginx/access.log \
#--with-http_gzip_static_module \
#--http-client-body-temp-path=/var/temp/nginx/client \
#--http-proxy-temp-path=/var/temp/nginx/proxy \
#--http-fastcgi-temp-path=/var/temp/nginx/fastcgi \
#--http-uwsgi-temp-path=/var/temp/nginx/uwsgi \
#--http-scgi-temp-path=/var/temp/nginx/scgi \
#--with-http_stub_status_module \
#--with-http_ssl_module
# 编辑
make
#安装(安装后,相关配置和命令会在 /usr/local/nginx 目录下)
make install
启动
# /usr/local/nginx/sbin 启动执行文件在此路径下
./nginx
# 启动后,需要访问的话,可以直接关闭防火墙,或者只开启80端口(可选)
#关闭防火墙
systemctl stop firewalld
#开启80端口
firewall-cmd --zone=public --add-port=80/tcp --permanent
#重新加载防火墙
firewall-cmd --reload
#查询80端口是否开启
firewall-cmd --zone=public --query-port=80/tcp
访问对应地址,看到此页面即表示启动成功
nginx配置说明
基础配置
#设置worker进程的用户,指的linux中的用户,会涉及到nginx操作目录或文件的一些权限(默认为 nobody 用户)
#user nobody;
#worker进程工作数设置,一般来说CPU有几个,就设置几个,或者设置为N-1也行
worker_processes 1;
#设置nginx进程 pid
#pid logs/nginx.pid;
# 设置工作模式
events {
#使用的哪种事件驱动(linux默认为epoll)
use epoll;
#单个worker进程可以接收的连接数
worker_connections 1024;
}
#http 是指令块,针对http网络传输的一些指令配置
http {
#include 引入外部配置,提高可读性,避免单个配置文件过大
include 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 logs/access.log main;
# sendfile使用高效文件传输,提升传输性能。启用后才能使用tcp_nopush 是指当数据表累积一定大小后才发送,提高了效率
sendfile on;
tcp_nopush on;
#设置客户端与服务端请求的超时时间,保证客户端多次请求的时候不会重复建立新的连接,节约资源损耗。(nginx处理的每个请求均有相应的超时设置。如果做好这些超时时间的限定,判定超时后资源被释放,用来处理其他的请求,以此提升 Nginx 的性能。)
keepalive_timeout 65;
#虚拟主机(可配置多个)
server {
# 监听的端口号
listen 80;
# 虚拟主机名称
server_name localhost;
#对应端口号后的规则(/ 默认直接监听80端口,无后缀)
location / {
# 根路径
root html;
# 访问根路径下对应的问题
index immoc.html index.htm;
}
}
}
location的解析规则
# 默认匹配
location / {
root /home
}
# = 精确匹配
location = /home/img/facel.png {
root /home
}
# ~*: 匹配正则表达式,不区分大小写
# 符合图片的显示
location ~ \.(GIF|jpg) {
root /home
}
# ~:匹配正则表达式,区分大小写
location ~ \.(gif|jpg|jpeg) {
root /home
}
# ^~:以某个字符路径开头
location ^~ /home/img {
root /home
}
跨域配置
server {
#允许跨域请求的域,* 代表所有
add_header 'Access-Control-Allow-Origin' *;
#允许请求的header
add_header 'Access-Control-Allow-Headers' *;
#允许带上cookie请求
add_header 'Access-Control-Allow-Credentials' 'true';
#允许请求的方法,比如 GET,POST,PUT,DELETE
add_header 'Access-Control-Allow-Methods' *;
listen 81;
server_name localhost;
#静态资源路径(访问 localhost:81/w)
location /w {
#映射别名(全路径)
alias /opt/soft/center/imooc;
}
}
~
文件压缩配置
http {
#是否开启实时文件压缩
gzip on;
#限制最小压缩,小于256字节的文件不会压缩
gzip_min_length 1;
#定义压缩的级别
gzip_comp_level 3;
#定义压缩的文件类型
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/vnd.ms-fontobject application/x-font-ttf font/opentype image/svg+xml image/x-icon image/jpeg image/gif image/png;
}
防盗链设置
server {
# 防盗链配置
# 对源站点验证
valid_referers 127.0.0.1;
#非法站点引用会进入下方判断
if ($invalid_referer) {
return 404;
}
listen 91;
server_name localhost;
location /imooc {
#拼接路径(imooc将会拼接到center后面)
root /opt/soft/center;
}
}
负载均衡
# ip_hash: 每个请求按照访问ip(即Nginx的前置服务器或者客户端IP)的hash结果分配,这样每个ip会固定访问一个后端服务器,前提是用户ip没有发生更改
# url_hash: 根据每次请求的url地址,hash后访问到固定的服务器节点
# weight 权重,不加默认为1,可设置
# max_conns: 限制每台server的最大连接数量
# slow_start: 缓慢的开始,配置后权重会慢慢从0升级,必须有权重,必须有集群(商业版才有,需要付费)
# down: 用于标记服务节点不可用
# backup: 表示当前服务器节点是备用机,只有在其他的服务器都宕机以后,自己才会加入到集群中,被用户访问到
# max_fails: 表示失败几次,则标记server已宕机,剔出上游服务,fail_timeout: 表示失败的重试时间
#upstream模块(默认轮询)
upstream tomcats {
# ip_hash;
# hash $request_uri;
# server localhost:8090 weight=2;
# server localhost:8080 max_conns=2;
# server localhost:8080 slow_start=60s;
# server localhost:8080 down;
# server localhost:8080 backup;
# server localhost:8080 max_fails=2 fail_timeout=15s;
server localhost:8080;
server localhost:8088;
}
server {
listen 85;
server_name localhost;
location / {
# 访问 tomcats 模块,会自动对内部的server进行轮询
proxy_pass http://tomcats;
}
}
Keepalived(长连接)提高吞吐量
upstream tomcats {
server localhost:8080;
server localhost:8088;
#keepalive 设置长连接处理的数量
keepalive 32;
}
server {
listen 85;
server_name localhost;
location / {
proxy_pass http://tomcats;
# 设置长连接http版本为1.1
proxy_http_version 1.1;
# 清除connection header 信息
proxy_set_header Connection "";
}
}
nginx的缓存
- 浏览器缓存: 加速用户访问,提升单个用户(浏览器访问者)体验,缓存在本地
server {
listen 92;
server_name localhost;
#静态资源路径
location /file {
#映射别名(全路径)
alias /opt/soft/center/imooc;
# expires表示过期时间,
#expires @22h30m; #今晚22点30分过期
#expires -1; -1 不缓存
# 最大过期时间
#expires max;
}
}
- Nginx缓存
- 缓存在nginx端,提升所有访问到nginx这一端的用户
- 提升访问上游(upstream)服务器的速度
- 用户访问仍然会产生请求流量
#设置缓存目录
proxy_cache_path /usr/local/nginx/upsteam_cache
#共享内存以及占用空间大小
keys_zone=mycache:5m
#设置缓存大小
max_size=1g
#缓存存在时间(超过此时间则被清理)
inactive=30s
#临时目录,使用后会影响nginx性能
use_temp_path=off;
server {
listen 85;
server_name localhost;
#开启并使用缓存
proxy_cache mycache;
#针对200,304状态码设置缓存时间
proxy_cache_valid 200 304 8h;
location / {
alias /opt/soft/center/imooc;
}
}
其它操作
按照时间(每分钟)分隔nginx日志(sh脚本)
#!/bin/bash
LOG_PATH="/var/log/nginx"
RECORD_TIME=$(date -d "yesterday" +%Y-%m-%d+%H:%M)
PID=/var/run/nginx/nginx.pid
mv ${LOG_PATH}/access.log ${LOG_PATH}/access.${RECORD_TIME}.log
mv ${LOG_PATH}/error.log ${LOG_PATH}/error.${RECORD_TIME}.log
#向Nginx.主进程发送信号,用于重新打开日志文件
echo $PID
kill -USR1 `cat` $PID
# 使用定时任务进行辅助
# yum install crontabs
# */1 * * * * /usr/local/nginx/sbin/cut_my_log.sh
# service crond restart