目录(逐步完善更新中)
一、Nginx在虚拟机下的安装
1. 安装依赖
# 安装依赖
yum install -y gcc-c++ # 安装 gcc 环境
yum install -y pcre pcre-devel # 安装 PRCE 库,用于解析正则表达式
yum install -y zlib zlib-devel
yum install -y openssl openssl-devel # https协议
2. 下载Nginx
建议切换至 /home/software 目录下下载,目录不存在执行:mkdir -p /home/software
wget http://nginx.org/download/nginx-1.16.1.tar.gz
3. 解压
tar -zxvf nginx-1.16.1.tar.gz
4. 创建临时目录
mkdir -p /var/temp/nginx
5. 进入解压目录
cd nginx-1.16.1/
6. 配置make文件
./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
含义说明:
命令 | 解释 |
---|---|
–prefix | 指定nginx安装目录 |
–pid-path | 指向nginx的pid |
–lock-path | 锁定安装文件,防止被恶意篡改或误操作 |
–error-log | 错误日志 |
–http-log-path | http日志 |
–with-http_gzip_static_module | 启用gzip模块,在线实时压缩输出数据流 |
–http-client-body-temp-path | 设定客户端请求的临时目录 |
–http-proxy-temp-path | 设定http代理临时目录 |
–http-fastcgi-temp-path | 设定fastcgi临时目录 |
–http-uwsgi-temp-path | 设定uwsgi临时目录 |
–http-scgi-temp-path | 设定scgi临时目录 |
7. 执行命令安装Nginx
make && make install
8. 启动Nginx
进入命令目录:
cd /usr/local/nginx/sbin
启动命令:
./nginx # 启动
./nginx -s stop # 直接停止
./nginx -s quit # 优雅停止
./nginx -s reload # 重新加载
./nginx -t # 检测配置文件
./nginx -v # 查看 Nginx 版本
二、Nginx.conf文件配置详解
#默认,允许所有用户表启动
#user nobody;
#工作线程,一般配置为服务器核心数,若服务器搭建有其他服务,建议为 核心数-1
worker_processes 1;
#日志配置,路径 级别 debug > info > notice > warn > error > crit > alert > emerg
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid文件路径
#pid logs/nginx.pid;
#
events {
#配置最大连接数
worker_connections 1024;
}
http {
#配置文件引入
include mime.types;
default_type application/octet-stream;
#自定义服务日志格式(与下方access_log为一组)
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
# main 为定义的格式名称,如此 access_log 就可以直接使用这个变量了
#access_log logs/access.log main;
# 使用高效文件传输,提升传输性能。启用后才能使用 tcp_nopush ,是指当数据表累积一定大小后才发送,提高了效率。
sendfile on;
#tcp_nopush on;
# keepalive_timeout 设置客户端与服务端请求的超时时间,保证客户端多次请求的时候不会重复建立新的连接,节约资源损耗。
#keepalive_timeout 0;
keepalive_timeout 65;
# gzip 启用压缩,html/js/css压缩后传输会更快
#gzip on;
#server 可以在 http 指令块中设置多个虚拟主机
#listen 监听端口
#server_name localhost、ip、域名
#location 请求路由映射,匹配拦截
#root 请求位置
#index 首页设置
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
log_format 说明:
参数名 | 参数意义 |
$remote_addr | 客户端ip |
$remote_user | 远程客户端用户名,一般为:’-’ |
$time_local | 时间和时区 |
$request | 请求的url以及method |
$status | 响应状态码 |
$body_bytes_send | 响应客户端内容字节数 |
$http_referer | 记录用户从哪个链接跳转过来的 |
$http_user_agent | 用户所使用的代理,一般来时都是浏览器 |
$http_x_forwarded_for | 通过代理服务器来记录客户端的ip |
root 与 alias :
root使用:
假如服务器资源路径为:
/home/dingwh/image/1.jpg
root 路径完全匹配访问 配置的时候为:
location /dingwh{
root /home
}
用户访问的时候请求为:
url:port/dingwh/image/1.jpg 参考:192.168.1.1:89/dingwh/image/1.jpg
alias使用:
配置location:
location /static{
alias /home/dingwh
}
则访问请求为:192.168.1.1:89/static/image/1.jpg
location 的匹配规则:
1 空格 :默认匹配,普通匹配
location / {
root /home;
}
2 = :精确匹配
location = /dingwh/image/1.png {
root /home;
}
3 ~* :匹配正则表达式,不区分大小写
#符合图片的显示
location ~ \.(jpg|jpeg|gif) {
root /home;
}
4 ~ :匹配正则表达式,区分大小写
#JPG大写才能匹配到
location ~ \.(JPG|jpeg) {
root /home;
}
5 ^~ :以某个字符路径开头
location ^~ /dingwh/img {
root /home;
}
三、Nginx 日志切割-手动
1. 创建一个shell可执行文件: cut_my_log.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主进程发送信号,用于重新打开日志文件
kill -USR1 `cat $PID`
2. 为 cut_my_log.sh 添加可执行的权限:
chmod +x cut_my_log.sh
3. 测试日志切割后的结果:
./cut_my_log.sh
四、Nginx 日志切割-定时
1. 安装定时任务:
yum install crontabs
2. crontab -e 编辑并且添加一行新的任务:
*/1 * * * * /usr/local/nginx/sbin/cut_my_log.sh
3. 重启定时任务:
service crond restart
4. 常用定时任务命令:
service crond start //启动服务
service crond stop //关闭服务
service crond restart //重启服务
service crond reload //重新载入配置
crontab -e // 编辑任务
crontab -l // 查看任务列表
5. 定时任务表达式:
Cron表达式是,分为5或6个域,每个域代表一个含义,如下所示:
分 | 时 | 日 | 月 | 星期几 | 年(可选) | |
取值范围 | 0-59 | 0-23 | 1-31 | 1-12 | 1-7 | 2019/2020/.. |
6. 常用表达式:
#每分钟执行:
*/1 * * * *
#每日凌晨(每天晚上23:59)执行:
59 23 * * *
#每日凌晨1点执行:
0 1 * * *
五、Nginx跨域与防盗链
跨域:在server节点下配置
#允许跨域请求的域,*代表所有
add_header 'Access-Control-Allow-Origin' *;
#允许带上cookie请求
add_header 'Access-Control-Allow-Credentials' 'true';
#允许请求的方法,如 GET/POST/PUT/DELETE
add_header 'Access-Control-Allow-Methods' *;
#允许请求的header
add_header 'Access-Control-Allow-Headers' *;
防盗链:在server节点下配置
#源站点验证,匹配当前域名及所有子域名
valid_referers *.dwh123.cn;
#非法判断
if ($invalid_referer) {
return 404;
}
六、Nginx负载均衡-搭建tomcat集群
#配置上游服务器,即tomcat集群,默认轮训方式
#upstream name , name值自定义,需与location下proxy_pass参数值保持一致使用
upstream dingwh{
server 192.168.1.101:8080;
server 192.168.1.102:8080;
server 192.168.1.103:8080;
}
server {
listen 80;
server_name www.dingwh.com;
location / {
#反向代理至tomcat集群
proxy_pass http://dingwh;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
七、upstream 指令详解
1. weight(权重)
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均
upstream dingwh{
server 192.168.1.101:8080 weight=5;
server 192.168.1.102:8080 weight=1;
server 192.168.1.103:8080 weight=10;
}
2. max_conns(最大连接数)
根据服务的性能来设置最大连接数,防止upstream服务器超载,默认值是0,表示没有限制。
upstream dingwh{
server 192.168.1.101:8080 weight=5 max_conns=1000;
server 192.168.1.102:8080 weight=1;
server 192.168.1.103:8080 weight=10;
}
3. slow_start
设置服务器权重从0恢复到标准值的时间,默认值为0,缓慢的启动,该参数不能使用在 hash 和 random load balancing 中。
如果在 upstream 中只有一台 server,则该参数失效。
upstream dingwh{
server 192.168.1.101:8080 weight=5 max_conns=1000 slow_start=60s;
server 192.168.1.102:8080 weight=1;
server 192.168.1.103:8080 weight=10;
}
4. max_fails、fail_timeout
max_fails:允许请求失败的次数
fail_timeout:max_fails次失败后,暂停的时间
默认:fail_timeout为10s,max_fails为1次。
max_fails=2 fail_timeout=20s 代表在20秒内请求失败2次,认为应用宕机,并等待下一个周期(时常fail_timeout)20s再一次去请求,判断是否连接是否成功。如果成功,将恢复之前的轮询方式,如果不可用将在下一个周期(fail_timeout)再试一次,如此循环直至可用
upstream dingwh{
server 192.168.1.101:8080 weight=5 max_conns=1000 slow_start=60s;
server 192.168.1.102:8080 weight=1 max_fails=2 max_fail_timeout=20s;
server 192.168.1.103:8080 weight=10;
}
5. down
标记服务节点不可用
upstream dingwh{
server 192.168.1.101:8080 weight=5 max_conns=1000 slow_start=60s;
server 192.168.1.102:8080 weight=1 max_fails=2 max_fail_timeout=20s;
server 192.168.1.103:8080 weight=10 down;
}
6. backup
表示当前服务器节点是备用机,只有在其他的服务器都宕机以后,才会加入到集群,被用户访问
upstream dingwh{
server 192.168.1.101:8080 weight=5 max_conns=1000 slow_start=60s;
server 192.168.1.102:8080 weight=1 max_fails=2 max_fail_timeout=20s;
server 192.168.1.103:8080 weight=10 backup;
}
7. ip_hash
保证用户访问可以请求到上游服务中的固定的服务器,前提是用户ip没有发生更改。
注意点:不能把后台服务器直接移除,只能标记 down.
upstream dingwh{
ip_hash;
server 192.168.1.101:8080 weight=5 max_conns=1000 slow_start=60s;
server 192.168.1.102:8080 weight=1 max_fails=2 max_fail_timeout=20s;
server 192.168.1.103:8080 weight=10 backup;
}
8. url_hash 与 least_conn
url_hash : 根据每次请求的url地址,hash后访问到固定的服务器节点。
least_conn : 请求将被传递给当前拥有最少活跃连接的server,同时考虑权重weight的因素。即:选取活跃连接数与权重weight的比值最小者为下一个处理请求的服务
upstream dingwh{
# url hash
hash $request_uri;
# 最少连接数
least_conn;
server 192.168.1.101:8080 weight=5 max_conns=1000 slow_start=60s;
server 192.168.1.102:8080 weight=1 max_fails=2 max_fail_timeout=20s;
server 192.168.1.103:8080 weight=10 backup;
}
9. Keepalived
keepalived : 设置长连接处理的数量,可用于提高吞吐量
proxy_http_version :设置长连接http版本为1.1
proxy_set_header :清除connection header 信息
upstream dingwh{
# url hash
hash $request_uri;
# 最少连接数
least_conn;
#长链接处理的数量
keepalive 32;
server 192.168.1.101:8080 weight=5 max_conns=1000 slow_start=60s;
server 192.168.1.102:8080 weight=1 max_fails=2 max_fail_timeout=20s;
server 192.168.1.103:8080 weight=10 backup;
}
server {
listen 80;
server_name www.dingwh.com;
location / {
#反向代理至tomcat集群
proxy_pass http://dingwh;
proxy_http_version 1.1;
proxy_set_header Connection "";
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
八、 Nginx的反向代理缓存
nginx cache的配置:
使用proxy_cache_path来配置。Nginx对访问过的内容在本地建立副本,当再次访问时,Nginx无需再次向接口服务发起请求,可减少网络带宽,提升响应速度,即使后台服务宕机,也可访问缓存数据,提高服务可用性
upstream dingwh{
server 192.168.1.101:8080;
server 192.168.1.102:8080;
server 192.168.1.103:8080;
}
# 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;
server {
listen 80;
server_name www.dingwh.com;
location / {
#反向代理至tomcat集群
proxy_pass http://dingwh;
# 启用缓存,和keys_zone一致
proxy_cache mycache;
# 针对200和304状态码缓存时间为8小时
proxy_cache_valid 200 304 8h;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
九、 Nginx配置HTTPS域名证书
安装SSL模块
nginx中配置https,必须安装ssl模块,也就是: http_ssl_module
进入到nginx的解压目录: /home/software/nginx-1.16.1
新增ssl模块(之前模块保留)
./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_ssl_module
编译和安装
make
make install
配置HTTPS
把ssl证书 *.crt 和 私钥 *.key 拷贝到nginx安装目录的conf目录下,即 /usr/local/nginx/conf 目录中。
腾讯云SSL证书下载后解压打开nginx证书配置,目录如下
监听443端口
server {
listen 443;
server_name www.dingwh.com;
# 开启ssl
ssl on;
# 配置ssl证书
ssl_certificate 1_www.dwh123.cn_bundle.crt;
# 配置证书秘钥
ssl_certificate_key 2_www.dwh123.cn.key;
# ssl会话
cache ssl_session_cache shared:SSL:1m;
# ssl会话超时时间
ssl_session_timeout 5m;
# 配置加密套件,写法遵循 openssl 标准
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
location / {
#反向代理至tomcat集群
proxy_pass http://dingwh;
# 启用缓存,和keys_zone一致
proxy_cache mycache;
# 针对200和304状态码缓存时间为8小时
proxy_cache_valid 200 304 8h;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}