跳到主要内容

Nginx常用配置以扩展阅读

静态服务

这是ngxin最基本的功能。其中分为2部分,一部分是一个很多html页面的文件,另一个是响应单文件,比如Vue写的项目。

server {
listen 80;
server_name example.com;

root /usr/share/nginx/html;
index index.html index.htm;

location / {
try_files $uri $uri/ =404;
}
}

这个配置中:

listen 80;:Nginx 监听 80 端口。 server_name example.com;:配置虚拟主机。 root /usr/share/nginx/html;:指定站点的根目录。也就是自己的html文件所在目录。 index index.html index.htm;:定义默认的首页文件。 location /:匹配所有 URI,使用 try_files 指令查找文件,如果找不到则返回 404 错误。

然后注意看上面的try_files这块,如果是单页面的话 就不能这么书写了。如下是对Vue,React配置,为什么要说这个,因此有时候会遇到Web逆向中每次爬虫返回的都是首页index.html,会觉得很奇怪,如果遇到了这种情况,就要转变策略要去看一下代码是什么框架写的,最简单的就是改变策略,使用自动化或者抓接口。

server {
listen 80;
server_name example.com;
root /path/to/dist;
index index.html;

location / {
try_files $uri $uri/ /index.html;
}
}

反向代理

一般情况,我们请求服务器的时候,服务器会做一个流量转发,

server {
listen 80;
server_name example.com;

location / {
proxy_pass http://backend_server;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}

在这个配置中:

listen 80;:Nginx 监听 80 端口。 server_name example.com;:为 example.com 配置虚拟主机。 location /:匹配所有 URI。 proxy_pass http://backend_server;:将请求转发到后端服务器 http://backend_server。 proxy_set_header 指令:设置传递到后端服务器的请求头。

负载均衡

一般在反响代理的时候总会用到负载均衡处理,

upstream backend {
server backend1.example.com;
server backend2.example.com;
}

server {
listen 80;
server_name example.com;

location / {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}

upstream backend 定义了一个后端服务器组,包括 backend1.example.com 和 backend2.example.com。 proxy_pass http://backend;:将请求转发到后端服务器组 backend,Nginx 会自动进行负载均衡。

一个完整的实例

不过把一些缓存也加进来了,只是配置,不需要单独介绍。这个配置以后可以直接拿来用。

proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m use_temp_path=off;

upstream backend {
least_conn;
server backend1.example.com;
server backend2.example.com;
}

server {
listen 80;
server_name example.com;

location / {
proxy_cache my_cache;
proxy_pass http://backend;
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}

server {
listen 443 ssl;
server_name example.com;

ssl_certificate /etc/nginx/ssl/nginx.crt;
ssl_certificate_key /etc/nginx/ssl/nginx.key;

location / {
proxy_cache my_cache;
proxy_pass http://backend;
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}

里面的疑问,为什么需要443呢?

Nginx 可以处理 SSL/TLS 加密,解除后端服务器的加密负担。回忆一下之前https章节里面的内容,必须是443端口协议。