Nginx的进程模型、反向代理配置、rewrite的使用、负载均衡配置、https配置、日志切割
进程模型
在nginx中,包括master与worker两类进程,master进程主要进行一些全局的初始化工作与worker进程的管理,事件处理均是在worker进程中执行的。nginx有两种启动模式,单进程启动与多进程启动
单进程启动
系统中仅有一个进程,该进程同时充当master与worker两种角色多进程启动
系统中仅有一个master进程,但是至少包含一个worker进程。
在nginx中进程模型采用fork方式,预先分配worker的子进程数量有配置文件worker_processes确定,默认为1。master主进程负责创建监听接口,fork子进程以后,由worker进程处理客户连接,每个worker子进程独自处理任务。
反向代理配置
proxy_pass 设置代理的服务器地址
proxy_set_header 设置header
location /nginx {
proxy_set_header Host $host;
proxy_set_header X_Real_IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://192.168.10.101:8080;
proxy_redirect default;
}
rewrite的使用
rewrite的主要作用是实现URL的重写
- 将原本要访问/garlic的目录重写为/garlic-manage
- 根据不同的浏览器将得到不同的结果
- 防止盗链
- 实现域名跳转
location /tomcat {
rewrite ^/tomcat http://www.garlic.com/nginx permanent;
}
浏览器输入www.garlic.com/tomcat然后重定向到www.garlic.com/nginx
负载均衡配置
upstream
ip_hash 默认值
权重 weight=x
fair 根据服务器的响应时间来分配请求
url_hash
可以标记backup\down等,如:
upstream nginx_upstream {
server 192.168.10.101:8080 down; # 表示此台服务器永久宕机
server 192.168.10.101:8081 backup; # 表示此服务器在所有机子宕机之后再启用
}
负载均衡完整配置
upstream nginx_upstream {
server 192.168.10.101:8080;
server 192.168.10.101:8081;
}
server {
listen 80;
server_name www.garlic.com;
#charset koi8-r;
access_log logs/garlic.access.log main;
location / {
root html;
index index.html index.htm;
}
location /nginx {
proxy_set_header Host $host;
proxy_set_header X_Real_IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://nginx_upstream;
proxy_redirect default;
}
location ~ .*\.(gif|jpg|jpeg|png|swf|js|css)$ {
expires 5m;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
https配置
openssl生成ssl证书
#创建服务器私钥
openssl genrsa -des3 -out server.key 1024
#创建签名请求的证书(csr); csr核心内容是一个公钥
openssl req -new -key server.key -out server.csr
#去除使用私钥是的口令验证
cp server.key server.key.org
openssl rsa -in server.key.org -out server.key
#标记证书使用私钥和csr
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
#x509是一种证书格式
#server.crt就是我们需要的证书
nginx中https的配置
# HTTPS server
server {
listen 443 ssl;
server_name garlic.com;
ssl_certificate /home/sam/opt/nginx/ssl/server.crt;
ssl_certificate_key /home/sam/opt/nginx/ssl/server.key;
# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 5m;
# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;
location / {
root html;
index index.html index.htm;
}
}
日志切割
在实际的生产环境中,nginx的日志增长速度是极其迅速的,为了避免日志文件的增加影响性能,同时为了方便日志进行分析处理,日志切割是必要的。那么如何进行nginx的日志切割呢?让我们来一起看看
mv access.log access.log20171206
kill -USR1 nginx [主进程号]
使用脚本编写定时任务来实现
日志切割脚本
#!/bin/sh
# log_cut.sh
# 用于实现nginx日志切割
#
# Created by iOS-Dev on 12/12/2017.
#
## nginx 日志文件所在目录
LOGS_PATH=/home/sam/opt/nginx/logs
## 获取昨天的日期yyyy-MM-dd
YESTERDAY=$(date -d "yesterday" +%Y-%m-%d)
## 移动文件
mv ${LOGS_PATH}/access.log ${LOGS_PATH}/access_${YESTERDAY}.log
## 向nginx主进程发送USR1信号,USR1 信号是重新打开日志文件
kill -USR1 $(cat /home/sam/opt/nginx/logs/nginx.pid)
编写linux定时任务,执行命令
crontab -e
定时任务内容
0 0 * * * /bin/bash /home/sam/opt/nginx/sbin/log_cut.sh # 每天0时0分进行日志切割