Nginx配置及相关使⽤模板
⽂章⽬录
Nginx配置
关于进程
worker_processes 8;# 进程数,由CPU核数定
worker_cpu_affinity 01;# 为⼀个进程指定CPU
worker_rlimit_nofile 65535;# 设置⼀个进程最⼤打开⽂件数
关于事件处理
events {
worker_connections 1024;# 每个进程允许的最⼤连接数
accept_mutex off;# 默认开启,多个worker将以串⾏⽅式处理请求;off后worker会争抢请求,可能会可能会产⽣惊问题;⾼并发时建议off
multi_accept on;# 允许⼀个⼯作进程可以同时接受所有新的连接;否则只接受⼀个,默认off
use epoll;# I/O多路复⽤机制
}
关于数据传输
tcp_nodelay off;# 默认关闭,即使⽤Nagle算法减少需传输数据包,优化⽹络;如不使⽤Nagle,则允许⼩包的发送。
sendfile on;# ⾼效⽂件传输
tcp_nopush on;# 需sendfile开启,防⽌⽹路阻塞,将响应头和正⽂⼀起发送,减少⽹络报⽂数量
gzip on;# 开启压缩传输
gzip_comp_level LEVEL;# 压缩级别(1-9)
gzip_min_length LENGTH;# ⾄少LENGTH个字节才压缩
limit_rate RATE;# 限制响应给客户端的传输速率,单位:b/s,0为⽆限制
# 使⽤SSL
ssl on;
ssl_certificate CERT_FILE;# 当前虚拟主机使⽤的PEM格式的证书⽂件
ssl_certificate CERT_KEY_FILE;# 私钥⽂件
ssl_protocols [ SSLv2 ][ SSLv3 ][ TLSv1 ][ TLSv1.1][ TLSv1.2];# ⽀持的SSL协议版本,默认后三个
关于处理超时
keepalive_timeout 75s;# TCP连接超时,默认75s(单位 s)
client_body_timeout 60s;# 客户端发送请求body超时,默认60s(还有header);如果连续60s没有收到客户端的数据,返回408(request timeout)send_timeout 60s;# 服务端向客户端发送数据超时,默认60s
resolver_timeout 30s;# DNS解析超时,默认30s
proxy_connect_timeout 60s;# nginx与upstream server(也就是代理)连接超时,默认60s
关于路径
root PATH;# 设置Web资源路径;⽤于指明⽤户请求的URL所对应的本地⽂件系统上的⽂档所在路径
location [=|~|~*|^~] URI {
alias PATH;# 仅⽤于location上下⽂,root指定URI的左侧,alias指定的是右侧
...
}
mutex error# = 完全匹配URI
# ~ 正则匹配URI,区分⼤⼩写
# ~* 正则匹配URI,不区分⼤⼩写
# ^~ 匹配URI左半部分,不区分⼤⼩写,可⽤来匹配⽬录
# ⽆符号匹配URI下所有URL
error_page CODE ...[=[ RESPONSE ]] URI;# 设置错误页
# error_page 404 =200 /404.html; # 将状态改为200,欺骗作⽤
关于⽇志
log_format NAME FORMAT_STR;# 定义⽇志格式
access_log /PATH/nginx.access.log NAME;
error_log /log;
配置模板
nginx在启动时会先加载 /etc/f ⽂件完成配置
user nginx;# ⽤户
worker_processes auto;# 进程数,由CPU核数定
worker_cpu_affinity 01;# 为⼀个进程指定CPU
worker_rlimit_nofile 65535;# 设置⼀个进程最⼤打开⽂件数
error_log /var/log/nginx/error.log;# 错误⽇志
pid /run/nginx.pid;
include /usr/share/nginx/modules/*.conf;
events {
worker_connections 1024;# 每个进程允许的最⼤连接数
accept_mutex off;# 默认开启,多个worker将以串⾏⽅式处理请求;off后worker会争抢请求,可能会可能会产⽣惊问题;⾼并发时建议off multi_accept on;# 允许⼀个⼯作进程可以同时接受所有新的连接;否则只接受⼀个,默认off
use epoll;# I/O多路复⽤机制
}
http {
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 /path_to_project/access.log main;# 访问⽇志
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/pes;
default_type application/octet-stream;
include /etc/nginx/conf.d/*.conf;# 包含conf.d下所有后缀为.conf的配置信息
}
/etc/nginx/conf.d
在此⽬录下配置项⽬所需配置,nginx启动时会将此⽬录下所有后缀为.conf的⽂件包含到f中去
server {
listen 80;
server_name www.domain;
return301 www.domain$request_uri;# 重定向
}
server {
listen 443 ssl http2;# 端⼝
server_name www.domain;# 主机名;⽀持 * 通配(*.p);⽀持~开头的正则匹配(~^REGEXP$)# 使⽤SSL
ssl_certificate /path_to_cert_file;# .pem
ssl_certificate_key /path_to_cert_key_file;# .key
root /path_to_project;# 根⽬录
index index.html;# 主页
### 样例
# Nginx + uWSGI # ⽅式部署
location /{
# proxy_pass 127.0.0.1:8080; # 使⽤http协议转发
uwsgi_pass 127.0.0.1:8080;# 使⽤uwsgi协议转发
# uwsgi_pass unix:///etc/socket/project_name.sock; # 使⽤unix套接字转发(如果Web在本地使⽤此⽅式更快) uwsgi_param UWSGI_PYHOME /path_to_project/venv;# 指向虚拟环境
uwsgi_param UWSGI_CHDIR /path_to_project;# 指向项⽬根⽬录
uwsgi_param UWSGI_SCRIPT manager:app;# 指向启动Web应⽤实例
include uwsgi_params;
}
# Nginx + FastCGI ⽅式部署
location /{
# proxy_pass 127.0.0.1:8081;
fastcgi_pass 127.0.0.1:8081;
# fastcgi_pass unix:///var/run/php-fpm/project_name.sock;
fastcgi_index index.php;# 启动⽂件
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
使⽤负载均衡
格式
upstream project_name {
# 负载服务器配置
}
server {
###
# 接收请求
###
location /{
# 这⾥使⽤http协议转发,也可使⽤uwsgi、fastcgi这些协议,原理是⼀样的
proxy_pass project_name;
}
}
分配策略
轮询
默认按顺序分配
upstream project_name {
server 47.0.0.1:8080;
server 47.0.0.2:8080;
# server unix:///etc/socket/project_name.sock;
}
按负载服务器的负载权重分配
upstream project_name {
# round-robin
server 47.0.0.1:8080 weight=9;
server 47.0.0.2:8080 weight=3;
}
ip_hash(按IP的hash分配)
按照IP地址hash,保证⼀个⽤户的请求只会由同⼀台服务器处理,这样就不会有因cookie或session引发的问题
upstream project_name {
ip_hash;
server 47.0.0.1:8080;
server 47.0.0.2:8080;
}
最少连接
谁连接数少转发给谁
upstream project_name {
least_conn;
server 47.0.0.1:8080;
server 47.0.0.2:8080;
}
参数
upstream project_name {
server 47.0.0.1:8080 weight=9 max_fails=1 fail_timeout=10s;# 当server连接失败max_fails次后,在fail_timeout时间内不转发请求 server 47.0.0.2:8080 weight=3;
server 47.0.0.3:8080;
server 47.0.0.6:8080 backup;# 若其它⾮backup服务器⽆法处理请求的时候,请求交由此服务器处理
server 47.0.0.9:8080 down;# 该服务器不参与负载
}
对应Web配置
uWSGI + Supervisor
uWSGI(项⽬根⽬录下创建uwsgi.ini)
[uwsgi]
http =127.0.0.1:8080# 对应http协议转发
# socket = 127.0.0.1:8080 # 对应uwsgi协议转发
# socket = /etc/socket/project_name.sock # 使⽤⽂件
workers/processes =16# 使⽤⼯作进程数
listen =512# 处理请求数量上限
master = true # 启⽤主进程
enable-threads = true # 启⽤线程
plugins = python3
chdir =/path_to_project;# 项⽬⽂件存放位置
wsgi-file= manager.py # 项⽬启动⽂件
callable= app
Supervisor( /etc/supervisor/conf.d下创建⽂件f)
[ program:project_name ]
command = uwsgi --ini /path_to_project/uwsgi.ini
autostart = true # 开机⾃启动
autorestart = true # ⾃动重启
# ⽇志
stdout_logfile =/path_to_project/run.log # 运⾏⽇志
stderr_logfile =/path_to_project/error.log # 错误⽇志
PHP-FPM
修改PHP-FPM配置(/etc/php-fpm.d/f)
user = nginx ;⽤户
group = nginx ;⽤户组
listen =127.0.0.1:8081
; listen =/var/run/php-fpm/project_name.sock ;使⽤unix套接字
listen.owner = nginx
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论