配置 Nginx

Nginx 是一种轻量级、高性能、低内存的 Web 服务器和反向代理服务器。

1. 正向代理和反向代理

正向代理:客户端向服务器发送请求,并指定目标服务器地址,然后由代理服务器和原始服务器通信,转交请求并获得响应,再返回给客户端。正向代理隐藏了真实的客户端,使真实的客户端对服务器不可见。

正向代理

反向代理:以代理服务器来接收互联网上的连接请求,然后将连接请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给客户端。此时的代理服务器对外就表现为一个反向代理服务器。

反向代理

2. 配置 Nginx

Mac 系统可以借助 brew 安装 Nginx。brew install nginx,安装成功后,配置文件在 /usr/local/etc/nginx 目录下。

Windows 系统可以在官网 下载 nginx

nginx 下载

解压缩后,配置文件在 \conf 目录下。移除掉部分被注释掉的代码(前面添加了 # 的那行代码)后,默认配置如下:

worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    #access_log  logs/access.log  main;

    sendfile        on; # 设置为 on 时,Nginx 会使用 sendfile() 系统调用来传输静态文件
    #tcp_nopush     on;

    keepalive_timeout  65; # 当这个超时 65s 到达时,如果连接上没有新的数据传输,Nginx 会关闭这个连接。

    #gzip  on;

    server {
        listen       80;
        server_name  localhost;

        location / {
            root   html;
            index  index.html index.htm;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

events 和 http 在最外层,server 在 http 中,location 在 server 中。server 和 location 都可以有多个配置,多个 server 代表多个服务,location 代表多个匹配规则。

该 server 监听了 80 端口,location 指定与请求中的 URI 的 "/" 前缀相匹配。例如请求 http://localhost/80 那么 nginx 会映射到 html/index.html 文件。

3. 配置反向代理

在前端开发中经常需要配置反向代理,已解决跨域问题。修改上面配置:

location / {
  proxy_pass https://www.baidu.com
}

这样访问页面就代理到百度了。

如果部署的服务是内网地址,如:192.168.0.110:10086,那么该如何配置。需要使用 upstream,它用来定义一组服务器,这些服务器可以监听不同的端口:

upstream backend-servers {
  server 192.168.0.110:10086
  server 192.168.0.111:10087  # 配置多个服务器
}

这时,location 要改成:

location / {
  proxy_pass http://backend-servers
}

4. 开启 gzip 压缩

gzip 是一种常用的网页压缩技术,通过 gzip 压缩之后,体积通常变为原来的一半甚至更小,节省带宽和提升传输速度。网络请求头中需要包含:Accept-Encoding: gzip 表示期望通过 gzip 压缩。

nginx 将经过 gzip 压缩过后的文件给浏览器并在响应头重添加:content-encoding: gzip,告诉浏览器自己采用的压缩算法是 gzip。

gzip on;  # 默认 off,on 表示开启 gzip
gzip_types text/plain text/csss application/json text/xml text/javascript  # gzip_types 表示要采用 gzip 压缩的 MIME 文件类型

5. 图片防盗配置

由于图片可以跨域访问,所以当图片被其他网站引用时,无形中增加了自家服务器负担。

server {
  # 图片防盗链
  location ~* \.(png|jpeg|jpg|gif)$ {
    valid_referers none blocked erver_names ~\.test\. ~\.test2\. *.qq.com;
    if ($invalid_referer) {
      return 403;
    }
  }
}

过滤请求:

# 如果是非指定请求,全返回 403
if ($request_method !~ ^(GET|POST|HEAD)$) {
  return 403;
}

location / {
  # IP 地址访问限制(只允许 192.168.0.110 的机器访问)
  allow 192.168.0.110
  deny all;
}
posted @ 2024-03-18 21:06  艾前端  阅读(29)  评论(0编辑  收藏  举报