Nginx核心配置文件 nginx.conf

nginx是反向代理服务器

正向代理:指为客户端做代理,隐藏客户的真实ip等信息;

反向代理:为服务端做代理,隐藏服务器的真实ip等信息;

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,错误级别从左到右越来越大

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

4. 设置nginx进程 pid

pid        logs/nginx.pid;

5. 设置工作模式

events {
    # 默认使用epoll
    use epoll;
    # 每个worker允许连接的客户端最大连接数
    worker_connections  10240;
}

6. http 是指令块,针对http网络传输的一些指令配置

http {
}

========================以下都是 http 指令块内的内容==========================

7. include 引入外部配置,提高可读性,避免单个配置文件过大

include       mime.types;

8. 设定日志格式,main为定义的格式名称,如此 access_log 就可以直接使用这个变量了

 9. sendfile使用高效文件传输,提升传输性能。启用后才能使用tcp_nopush,是指当数据表累积一定大小后才发送,提高了效率。

sendfile        on;
tcp_nopush      on;

 10. keepalive_timeout设置客户端与服务端请求的超时时间,保证客户端多次请求的时候不会重复建立新的连接,节约资源损耗。

#keepalive_timeout  0;
keepalive_timeout  65;

11. gzip启用压缩,html/js/css压缩后传输会更快

gzip on;

12. server可以在http指令块中设置多个虚拟主机

  • listen 监听端口
  • server_name localhost、ip、域名
  • location 请求路由映射,匹配拦截
  • root 请求位置
  • index 首页设置
    server {
            listen       88;
            server_name  localhost;
    
            location / {
                root   html;
                index  index.html index.htm;
            }
    }

13. server 中的 root与alias

假如服务器路径为:/home/didiok/files/img/face.png

  • root 路径完全匹配访问,配置的时候为
location /didiok {
    root /home
}

        用户访问的时候请求为:url:port/didiok/files/img/face.png

  • alias 可以为你的路径做一个别名,对用户透明 ,配置的时候为:
  • location /hello {
        alias /home/didiok
    }
    

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

14. location的匹配规则

    ◆    空格:默认匹配——普通匹配

location / {
     root /home;
}

    ◆    =:精确匹配

location = /didiok/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;
}

15. 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' *;

如果上面的配置失败的话,可以试试下面的配置:

upstream api.didiok.com {
    server 192.168.1.172:8088; 
}

server {
    listen 80;
    server_name api.didiok.com;

 #允许跨域请求的域,*代表所有
add_header 'Access-Control-Allow-Origin' $http_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' *;


    location / {

        if ($request_method = 'OPTIONS'){
            add_header Access-Control-Allow-Origin $http_origin always;
            add_header Access-Control-Allow-Credentials true always;
            add_header Access-Control-Allow-Methods * always;
            add_header Access-Control-Allow-Headers 'Authorization,X-Requested-With,Content-Type,Origin,Accept,headerUserId' always;
            add_header Access-Control-Max-Age 3600;
            add_header Content-length 0;
            return 200;
        }
        proxy_pass http://api.didiok.com;
    }
}

16. nginx配置静态资源防盗链

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

17. upstream 指令参数

(1)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;
}

(2)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,则该参数失效。

(3)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中。

(4)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,如果还是失败,重复上一过程,直到恢复。

18. keepalive用于设置长连接数量,可以提高服务器的吞吐量

    keepalive: 设置长连接处理的数量
    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 "";
        }
    }

19. 负载均衡

(1)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;
}
  • ip_hash 的哈希算法只计算ip地址的前三段,例如:用户172.16.109.132访问服务器时哈希算法只计算172.16.109,所以IP地址前三段相同的用户会被指向同一个服务器。

  • 由于ip_hash算法会将同一个用户的请求指向同一个服务器,所以如果用户发起的大量破坏性的请求的话,可能造成一个服务器负载过重。

  • 如果要一处nginx中的服务器,标记为down,可以保留当前的用户ip的哈希算法。

(2)url_hash与least_conn

url_hash:根据每次请求的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;
    }
}

(3)一致性哈希算法

根据服务器的ip或者主机名进行hash,使服务器分布在0~2^32-1的圆环上。

采用顺时针就近原则,用户会落到hash算法值后最近的节点;

当有服务器宕机(减少)或增加后,其余大部分的用户不会有变动,而离宕机服务器或者新增服务器 节点 (hash算法值)更接近的用户才会有影响(这样保证了大部分用户请求服务器节点的稳定性)

 20. Nginx缓存

(1)浏览器缓存

加速用户访问,提升单个用户(浏览器访问者)体验,缓存在浏览器本地。

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

(2)Nginx的反向代理缓存

上游服务器静态资源缓存到nginx,比如有一台tomcat静态资源服务器,在Nginx中设置了缓存之后,会把从tomcat静态资源服务器请求到的静态资源缓存到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=off;
location / {
    proxy_pass  http://tomcats;

    # 启用缓存,和keys_zone一致
    proxy_cache mycache;
    # 针对200和304状态码缓存时间为8小时
    proxy_cache_valid   200 304 8h;
}

 

21. 使用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.didiok.com;

    # 开启ssl
    ssl     on;
    # 配置ssl证书
    ssl_certificate      1_www.didiok.com_bundle.crt;
    # 配置证书秘钥
    ssl_certificate_key  2_www.didiok.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/;
        index  index.html index.htm;
    }
 }

(3)reload Nginx

./nginx -s reload

腾讯云Nginx配置https文档地址:SSL 证书 Nginx 服务器 SSL 证书安装部署-证书安装-文档中心-腾讯云

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值