Nginx基础配置

270 阅读2分钟

1、使用Nginx代理静态资源

纯静态的HTML项目,例如一个编译好的Vue项目,可以通过简单的Nginx配置来代理访问。

添加配置文件: /etc/nginx/conf.d/default.conf

server {
    listen 80;
    # 指定访问的域名
    server_name www.abc.com;
    # 指定项目根路径
    root /var/www;
    # 指定首页文件(可选)
    index index.html;
}

更多的,可以启用Gzip压缩,优化传输速率;可以通过location参数设定不同路径的访问内容:

server {
    listen 80;
    # 可以指定固定的域名,也可以如此设定匹配任意符合后缀的域名
    server_name *.com *.cn *.com.cn *.net;
    # 指定项目根路径
    root /var/www;
    # 指定首页文件(可选)
    index index.html;

    # 启用压缩,可选
    gzip on;
    # 设定大于多大的文件才启用压缩
    gzip_min_length 1k;
    # 压缩比,1~9的整数,数字越大压缩效果越好,消耗时间越长
    gzip_comp_level 6;
    # 指定要压缩的文件类型
    gzip_types text/plain application/javascript application/x-javascript text/javascript text/xml text/css application/json;

    # 可以指定特殊路径指向不同的目录
    # 注意此时如果访问URL“/static/test.png”,实际访问的文件将是“/var/www_static/static/test.png”
    location /static/ {
        root /var/www_static;
    }
}

2、使用Nginx反向代理后端服务

假如有一个Node后端服务,监听在8080端口,可以使用如下Nginx配置作反向代理:

server {
    listen 80;
    server_name *.com *.cn *.com.cn *.net;
   
    location / {
        proxy_pass http://localhost:8080;
    }

}

通过命令systemctl reload nginx重新加载Nginx配置后,即可通过域名访问到监听在8080端口的程序。

通常,我们还需要更多的参数设置,比如把客户端的IP传递给后端服务等:

server {
    listen 80;
    # 可以指定固定的域名,也可以如此设定匹配任意符合后缀的域名
    server_name *.com *.cn *.com.cn *.net;
   
    location / {
        # 当客户端请求没有Host时自动加入域名信息
        proxy_set_header Host $host;
        # 把客户端的IP加入到请求头
        proxy_set_header X-Real-IP $remote_addr;
        # 把请求经过的代理的IP加入到请求头
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        # 传递原请求的所有headers,如果设置为off则不传递
        proxy_pass_request_headers on;
        # 代理转发的目标
        proxy_pass http://localhost:8080;
    }
}

以上的配置仅支持代理HTTP请求,假如服务还包含Websocket,需要加入以下参数:

proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";

3、Nginx配置HTTPS

阿里云、腾讯云等都会提供免费的HTTPS证书,下载下来后,找到Nginx的专属证书,通常是后缀为“.key”、“.pem”的两个文件。

把这两个文件上传到服务器,比如路径/etc/nginx/ssl,修改配置文件如下:

server {
    # 端口为https默认的443
    listen 443 ssl;
    server_name *.com *.cn *.com.cn *.net;
    # 指定证书文件
    ssl_certificate /etc/nginx/ssl/www.abc.com.pem;
    ssl_certificate_key /etc/nginx/ssl/www.abc.com.key;
   
    location / {
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass_request_headers on;
        proxy_pass http://localhost:8080;
    }

}

4、使用Nginx作简单的负载均衡

假如有两个进程分别监听在8080和8081端口,可以使用以下配置,让Nginx将请求随机分配到这两个端口的程序:

# 定义服务列表,可以是本地不同的端口的服务,也可以是不同服务器上的服务
upstream my-servers {
    server localhost:8080;
    server localhost:8081;
}

server {
    listen 80;
    server_name *.com *.cn *.com.cn *.net;
   
    location / {
        # 设置转发的目标为前面设置的服务器组
        proxy_pass http://my-servers;
    }

}

实践环境:CentOS 8.3 Nginx 1.14.1