Nginx 配置备忘、参数优化、http强制跳转以及负载平衡

Nginx 参数优化、http强制跳转以及负载平衡

这里是我博客中这篇文章的地址: 个人博客 欢迎访问!!!

Nginx 作为一个非常好用的 web 服务器,被广泛运用在服务器部署的最前端或者是高可用集群下的 Keeplived 等之后,用作静态文件服务器,反向代理等。

Nginx 安装、常用命令以及配置文件

一般使用软件包管理安装较为方便,安装完成之后,启动服务以及开机自启:

yum install -y nginx
systemctl enable nginx
systemctl start nginx

其主要配置文件主要位置在 /etc/nginx 下。在这个配置文件中,通常会导入 /etc/nginx/conf.d/ 或者 /etc/nginx/site-enable/ 文件夹下的子配置文件。

在修改配置之后,通常使用下面命令来检查配置文件以及使其生效:

nginx -t # 检查配置文件
nginx -s reload # 重新载入配置文件

另外可以使用 -v 参数来查看 Nginx 版本。以及 -V 来获取更多版本信息(包括编译的模块等)。

全局配置

Nginx 的全局配置有如下重点参数

user nginx; # 当前用户,最好不要使用 root
worker_processes auto; # 工作进程数,可配置为 CPU 逻辑核数
pid /run/nginx.pid; # pid 文件位置

之后是 event 域。这里指定了 Nginx 事件驱动模型,常用 epoll 。每个进程的最大连接数为 1024 一般无需修改。

events {
    use epool;
    worker_connections 1024;
}

HTTP/HTTPS 配置

在 http 配置块中是配置文件的主体。其中有如下参数:

    access_log  /var/log/nginx/access.log  main;
    error_log /var/log/nginx/error.log;

这里是两个总日志文件的位置以及日志记录的级别。各个子站也可以单独配置自己的日志位置。

    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 2048;


    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;

这里是一些常用配置,一般无需多做更改。其中 keepalive_timeout 是 keepalive 超时时间,可以改小为 15 或者 0。

gzip 用于对一些静态文件的压缩。可以极大的节省传输带宽,提高用户体验。其中压缩等级 gzip_comp_leve 越高,压缩率越大,传输的内容越小,CPU 负载越大。

    gzip on;
    gzip_comp_level 4;
    gzip_min_length 1000;
    gzip_proxied expired no-cache no-store private auth;
    gzip_types text/plain application/x-javascript text/xml text/css application/xml;

下面一些配置限制了传输的包的头部和主题部分缓存的大小。其中 client_max_body_size 是最大包的长度,一般无需太大。

    client_body_buffer_size 10k;
    client_header_buffer_size 1k;
    client_max_body_size 8M;

下面这个命令导入了各个站点配置文件。一般可以一个子站配置个文件。

    include /etc/nginx/conf.d/*.conf; 

站点配置模板

各个站点配置在应该写在 server 配置块中。最基本的配置如下:

实例一 ———— http 强制跳转 https

目前个人的项目已经全部迁移到 https 协议之下。


server {
    listen 80 default_server;
    listen [::]:80 default_server;
    server_name ertuil.top www.ertuil.top my.ertuil.top;

    rewrite ^(.*)$  https://$host$1 permanent;
}

两个 listen 表示监听 IPv4 和 IPv6 的80端口,且当有多个子站点的时候,设置当前为默认。域名设置值为 ertuil.top 等,可以设置多个,包括 localhost 等。而后强制跳转到对应的 https url 下,实现强制跳转 https。

如果没有 IPv6 地址,可以不写第二句。

实例二 ———— Nginx 配置中默认的配置项

其中 location 匹配规则不详细赘述。

    server {
        listen       80 ;
        listen       [::]:80 ;
        server_name  _;
        root         /usr/share/nginx/html;

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        location / {  # 最后匹配项
        }

        error_page 404 /404.html; # 404 错误页面
            location = /40x.html {
        }

        error_page 500 502 503 504 /50x.html;  # 50x 错误页面
            location = /50x.html {
        }
    }

实例三 ———— https 静态网站。

https 下需要配置 ssl ,可以理解为证书的相关信息。具体配置例子为:

server {
    listen 443 ssl http2 default_server;
    listen [::]:443 ssl http2 default_server;
    server_name ertuil.top www.ertuil.top my.ertuil.top;

    ssl on;
    ssl_certificate fullchain.cer; # 公钥位置
    ssl_certificate_key ertuil.top.key; # 私钥位置
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    ssl_session_timeout 5m;

    location / {
        root /opt/blog;
        try_files $uri $uri/ /index.html @router;
    }

    location @router {
        rewrite ^.*$ /index.html last;
    }
}

注意到 listen 后面有 http2 。表示当浏览器支持时,使用 http2 协议(注意,使用此选项需要 Nginx 有 http2 相关的模块,否则需要自行编译。)。https 比 http 配置多出了 ssl 相关的配置。主要是 ssl_certificatessl_certificate_key 需要指明秘钥对的存放位置。

静态文件代理采用下面两个 location 来配置。比如 root 指明网站文件的位置。重点需要指明其中 try_files 表示按照这个顺序来查找有没有这样的文件。主要用于服务 angular 、vuejs 等前端框架编译出来的静态页面(通常只有一个 index.html 作为入口),否则会出现异常的 404 。

实例四 ———— 动态网站负载

Nginx 通常无法直接负载由 Java, Python, PHP 等写成的动态网站,需要代理将请求发送给后端服务器,比如 tomcat, django 等。下面是一个最基本的反向代理配置:

server {
    listen      443 ssl http2;
    server_name  git.ertuil.top www.git.ertuil.top;

    client_max_body_size 4G;
    ssl on;
    ssl_session_timeout 5m;
    ssl_certificate fullchain.cer;
    ssl_certificate_key ertuil.top.key;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;

    location / {
        proxy_pass http://127.0.0.1:3000; # 动态 WEB 服务器所在的 IP 地址和端口号
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection keep-alive;
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-Proto  $scheme;
    }
}

以上配置就将动态请求转发给本机 127.0.0.1 上 3000 端口监听的后端服务器。

注意,通过不同域名的配置,可以实现反向代理,即通过域名的不同,分辨出子站的不同,nginx 会将请求发送给多个后端不同的 IP 和端口,实现多个站点的配置。

关于几个常用 location 块的配置

静态文件缓存


    location ~* \.(html?|xml|json)$ {
        expires 1h; # 定义这些文件缓存的过期时间
    }

    location ~* \.(jpg|jpeg|png|gif|ico|css|js|ttf|woff2)$ {
        expires 1M;
        access_log off;
        add_header Cache-Control "public";
        proxy_ignore_headers "Set-Cookie";
    }

关于动态代理

    location / {
        try_files $uri @proxy_to_app;
    }
    location @proxy_to_app {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_redirect off;
        proxy_pass http://127.0.0.1:8002;
    }

关于 Nginx 文件管理服务器。

可在某些目录下配置 Nginx 文件服务器功能:

    location ^~ /data/ {
        alias /opt/aria2/data/;
        autoindex on;
        autoindex_exact_size on;
        autoindex_localtime on;
    }

关于负载平衡

为了实现一定程度的高可用和承载更大的负载,可以使用 Nginx 提供的 7 层负载平衡功能。具体需要 upstream 块。比如:

    upstream server_1 {
        server 172.33.0.1 weight=2; # weight 权重,越大被使用频率越高
        server 172.33.0.2 weight=3 max_fails=2; # 最多失败次数,默认为 1
        server 172.33.0.3 weight=1 fail_timeout=15; # 如果访问失败,则 15 秒内不往这里发送请求。默认为 10 秒。
        server 172.33.0.6 weight=2 backup; # 备用
        server 172.33.0.6 weight=5 max_conns=1000; 最大连接数为 1000
    }

之后在 server 域中可以当做转发的目的地址使用,比如:

    location / {
        proxy_pass http://server_1;
    }

总结

以上就是我在 Nginx 使用过程中常用的配置的模板。实际使用需要根据实际需要具体配置。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值