nginx.conf 核心配置文件

  1. 设置worker进程的用户,指的linux中的用户,会涉及到nginx操作目录或文件的一些权限,默认为 nobody
    user root;
  2. worker进程工作数设置,一般来说CPU有几个,就设置几个,或者设置为N-1也行
    worker_processes 1;
  3. nginx 日志级别 debug | info | notice | warn | error | crit | alert | emerg ,错误级别从左到右越来越大
  4. 设置nginx进程 pid
    pid logs/nginx.pid;
  5. 设置工作模式

    events {
    # 默认使用epoll
    use epoll;
    # 每个worker允许连接的客户端最大连接数
    worker_connections 10240;
    }
  6. http 是指令块,针对http网络传输的一些指令配置
    `http {
    }`
  7. include 引入外部配置,提高可读性,避免单个配置文件过大
    include mime.types;
  8. 设定日志格式, main 为定义的格式名称,如此 access_log 就可以直接使用这个变量了
    参数名 参数意义
    $remote_addr 客户端ip
    $remote_user 远程客户端用户名,一般为:’-’
    $time_local 时间和时区
    $request 请求的url以及method
    $status 响应状态码
    $body_bytes_send 响应客户端内容字节数
    $http_referer 记录用户从哪个链接跳转过来的
    $http_user_agent 用户所使用的代理,一般来时都是浏览器
    $http_x_forwarded_for 通过代理服务器来记录客户端的ip
  9. sendfile 使用高效文件传输,提升传输性能。启用后才能使用 tcp_nopush ,是指当数据表累积一定大小后才发送,提高了效率。
    `sendfile on;
    tcp_nopush on;`
  10. keepalive_timeout 设置客户端与服务端请求的超时时间,保证客户端多次请求的时候不会重复建立新的连接,节约资源损耗。

    #keepalive_timeout 0;
    keepalive_timeout 65;

root 与 alias
假如服务器路径为:/home/imooc/files/img/face.png
root 路径完全匹配访问
配置的时候为:

location /imooc {
root /home
}

用户访问的时候请求为: url:port/imooc/files/img/face.png
alias 可以为你的路径做一个别名,对用户透明
配置的时候为:

location /hello {
root /home/imooc
}

用户访问的时候请求为: url:port/hello/files/img/face.png ,如此相当于为目录 imooc 做一个自定义的别名。


location 的匹配规则
空格 :默认匹配,普通匹配

location / {
root /home;
}

= :精确匹配

location = /imooc/img/face1.png {
root /home;
}

~* :匹配正则表达式,不区分大小写

#符合图片的显示
location ~ \.(GIF|jpg|png|jpeg) {
root /home;
}

~ :匹配正则表达式,区分大小写

#GIF必须大写才能匹配到
location ~ \.(GIF|jpg|png|jpeg) {
root /home;
}

^~ :以某个字符路径开头

location ^~ /imooc/img {
root /home;
}

Nginx 跨域配置支持

#允许跨域请求的域,*代表所有
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' *;

Nginx 防盗链配置支持

#对源站点验证
valid_referers *.imooc.com;
#非法引入会进入下方判断
if ($invalid_referer) {
return 404;
}

upstream 指令参数 max_conns
限制每台server的连接数,用于保护避免过载,可起到限流作用。
测试参考配置如下:

# worker进程设置1个,便于测试观察成功的连接数
worker_processes 1;
upstream tomcats {
server 192.168.1.173:8080 max_conns=2;
server 192.168.1.174:8080 max_conns=2;
server 192.168.1.175:8080 max_conns=2;
}

upstream 指令参数 slow_start
商业版,需要付费
配置参考如下:

upstream tomcats {
server 192.168.1.173:8080 weight=6 slow_start=60s;
# server 192.168.1.190:8080;
server 192.168.1.174:8080 weight=2;
server 192.168.1.175:8080 weight=2;
}

注意
该参数不能使用在 hash 和 random load balancing 中。
如果在 upstream 中只有一台 server,则该参数失效。


upstream 指令参数 down、backup
down 用于标记服务节点不可用:

upstream tomcats {
server 192.168.1.173:8080 down;
# server 192.168.1.190:8080;
server 192.168.1.174:8080 weight=1;
server 192.168.1.175:8080 weight=1;
}

backup 表示当前服务器节点是备用机,只有在其他的服务器都宕机以后,自己才会加入到集群中,被用户访问到:

upstream tomcats {
server 192.168.1.173:8080 backup;
# server 192.168.1.190:8080;
server 192.168.1.174:8080 weight=1;
server 192.168.1.175:8080 weight=1;
}

注意
backup 参数不能使用在 hash 和 random load balancing 中。


upstream 指令参数 max_fails、fail_timeout
max_fails :表示失败几次,则标记server已宕机,剔出上游服务。
fail_timeout :表示失败的重试时间。
假设目前设置如下:
max_fails=2 fail_timeout=15s
则代表在15秒内请求某一server失败达到2次后,则认为该server已经挂了或者宕机了,随后再过15秒,这15秒内不会有新的请求到达刚刚挂掉的节点上,而是会
运作的server,15秒后会再有新请求尝试连接挂掉的server,如果还是失败,重复上一过程,直到恢复。

Keepalived 提高吞吐量
keepalived : 设置长连接处理的数量
proxy_http_version :设置长连接http版本为1.1
proxy_set_header :清除connection header 信息

upstream tomcats {
# server 192.168.1.173:8080 max_fails=2 fail_timeout=1s;
server 192.168.1.190:8080;
# server 192.168.1.174:8080 weight=1;
# server 192.168.1.175:8080 weight=1;
keepalive 32;
}
server {
listen 80;
server_name www.tomcats.com;
location / {
proxy_pass http://tomcats;
proxy_http_version 1.1;
proxy_set_header Connection "";
}
}

负载均衡 ip_hash
ip_hash 可以保证用户访问可以请求到上游服务中的固定的服务器,前提是用户ip没有发生更改。
使用ip_hash的注意点:
不能把后台服务器直接移除,只能标记 down .

upstream tomcats {
ip_hash;
server 192.168.1.173:8080;
server 192.168.1.174:8080 down;
server 192.168.1.175:8080;
}

负载均衡 url_hash 与 least_conn
根据每次请求的url地址,hash后访问到固定的服务器节点。

upstream tomcats {
# url hash
hash $request_uri;
# 最少连接数
# least_conn
server 192.168.1.173:8080;
server 192.168.1.174:8080;
server 192.168.1.175:8080;
}
server {
listen 80;
server_name www.tomcats.com;
location / {
proxy_pass http://tomcats;
}
}

Nginx的缓存

  1. 浏览器缓存:
    加速用户访问,提升单个用户(浏览器访问者)体验,缓存在本地
  2. Nginx缓存
    缓存在nginx端,提升所有访问到nginx这一端的用户
    提升访问上游(upstream)服务器的速度
    用户访问仍然会产生请求流量
    控制浏览器缓存:

    location /files {
    alias /home/imooc;
    # expires 10s;
    # expires @22h30m;
    # expires -1h;
    # expires epoch;
    # expires off;
    expires max;
    }

Nginx的反向代理缓存

# 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=
location / {
proxy_pass http://tomcats;
# 启用缓存,和keys_zone一致
proxy_cache mycache;
# 针对200和304状态码缓存时间为8小时
proxy_cache_valid 200 304 8h;
}

使用Nginx配置HTTPS域名证书

  1. 安装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
  2. 配置HTTPS
    把ssl证书 .crt 和 私钥 .key 拷贝到 /usr/local/nginx/conf 目录中。
    新增 server 监听 443 端口:

    server {
    listen 443;
    server_name www.imoocdsp.com;
    # 开启ssl
    ssl on;
    # 配置ssl证书
    ssl_certificate 1_www.imoocdsp.com_bundle.crt;
    # 配置证书秘钥
    ssl_certificate_key 2_www.imoocdsp.com.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 / {
    proxy_pass http://tomcats/;

你可能感兴趣的:(nginx)