该例为前端代理功能+http服务器功能
user nginx; # 所有者(对应项目应赋予此所有者相关读写执行权限)
worker_processes 2; # 启用进程
error_log logs/error.log; # 错误日志
pid logs/nginx.pid; # pid保存文件
`nginx 工作模式全局配置`
events {
worker_connections 2048; # 最大连接数
multi_accept on; # 尽可能多的接收连接
use epoll; # 轮询方式
}
`http服务配置`
http {
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 on; # 高效传输文件模式(跳过文件写入用户buffer步骤)
# 硬盘 >> kernel buffer >> user buffer>> kernel socket buffer >>协议栈
# 硬盘 >> kernel buffer (快速拷贝到kernelsocket buffer) >>协议栈
tcp_nopush on; # 在数据包最大时发送(解决网络拥堵)
keepalive_requests 2000; #单个长连接提供的最大请求数量,默认100
keepalive_timeout 600; #长连接的存在时间,默认75秒。太小的情况下,执行长时间的页面会失败。IE是强制60秒
send_timeout 300; #一个长连接不活动的时间上限,默认60秒
open_file_cache_valid 30 ; #30秒检查一次缓存的有效性,默认60秒
open_file_cache max=102400 inactive=20; #缓存文件的相关信息(非本身),max缓存条目,inactive失效时间
open_file_cache_errors on; #错误信息也缓存
server_tokens off; #nginx版本是否显示给用户。off是关闭。默认开启
client_max_body_size 100m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 # 启动特定加密协议
ssl_prefer_server_ciphers on; # 优先使用服务端加密套件
gzip on; # 压缩发送数据
gzip_disable "msie6"; # 为指定客户端禁止压缩数据
# gzip_vary on; #
# gzip_proxied any; # 压缩所有请求(off|expired|no-cache|no-sotre|private|no_last_modified|no_etag|auth|any])
# gzip_comp_level 6; # 压缩等级 1-9(结果低到高)
# gzip_buffers 16 8k; # 申请内存大小
# gzip_http_version 1.1; # 标识http版本
# gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
######################前端代理+安全证书认证,做基于域名的虚拟主机
`负载均衡配置:一般用来实现分布式集群配置`
upstream api1.demo.net { #定义将此域名的请求转发给后端的指定IP地址
server 192.168.0.123:80;
}
`服务主机配置`
server {
listen 119.254.xxx.xxx:80;
listen 119.254.xxx.xxx:443 ssl;
server_name api1.demo.net;
charset utf-8;
access_log logs/access.log main;
ssl_certificate /etc/letsencrypt/live/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/chain.pem;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4:!DH:!DHE;
ssl_prefer_server_ciphers on;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
location ^~ /.well-known/acme-challenge/ {
root /opt/nginx/html/zhengshu/;
try_files $uri = 404;
}
location / {
# 反向代理
proxy_pass http://api1.demo.net; #将请求转发给此域名
proxy_set_header Host $host; #将请求头赋给Host
proxy_set_header X-Real-IP $remote_addr; #将客户端的真实IP赋予X-Real-IP,这样就记录了客户端真实IP
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #记录用户的真实IP和经过的代理nginx IP
proxy_redirect off;
}
}
#####################后端接收转发信息部分(提供http服务)
upstream api2.demo.net { #指定api2.demo.net所对应的IP和访问端口
# ip_hash # 指定请求调度算法 默认为weight权重
server 192.168.0.123:8000;
server 192.168.0.123:8001 down; # 该主机暂停服务
server 192.168.0.123:8002 max_fails=3; # 最大失败次数(超过暂停服务)
server 192.168.0.123:8003 fail_timeout=20; # 请求处理失败后暂停20s重新发起请求
server 192.168.0.123:8004 max_fails=3 fail_timeout=20s;
}
`其他服务主机配置,配置多个server可以让一个nginx下运行多个不同项目`
server {
listen 192.168.0.123:80;
server_name api2.demo.net;
location /weixin/ {
rewrite ^(.*)$ https://api.demo2.com$1 permanent; #301重定向(永久重定向)
rewrite ^(.*)$ https://api.demo2.com$1 redirect; #302重定向(临时重定向)
}
location /static {
alias /opt/static/;
}
location /media {
alias /opt/media/;
}
location / {
# uwsgi 反向代理
uwsgi_pass api2.demo.lejian; #将符合该匹配项的请求转发给指定uwsgi进程
include uwsgi_params; #指包含uwsgi_params文件,nginx自带
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_redirect off;
}
}
}