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