常用的一些Nginx配置

1、监听端口

代码语言:javascript
复制
server {
    # 用于HTTP协议
    listen 80;
# 用于HTTPS协议
listen 443 ssl;

# 用于HTTP2
listen 443 ssl http2;

# 使用IPv6监听80端口
listen [::]:80;

# 仅使用IPv6
listen [::]:80 ipv6only=on;

}

2、日志功能

Nginx的日志分为两种:access_log (访问日志)和 error_log(错误日志)。

对于日志的格式,Nginx提供了一种名为 combine 的格式,如果没有明确指定日志格式则默认使用该格式。

如果不使用 combine 格式的话,可以使用 log_format 指令来自定义,其具体用法参考Nginx日志配置详解或者官方文档:HttpLog模块-Nginx中文文档。

2.1、访问日志

访问日志主要记录客户端的请求,客户端向Nginx服务器发起的每一次请求都记录在这里。客户端IP,浏览器信息,referer,请求处理时间,请求URL等都可以在访问日志中得到。

代码语言:javascript
复制
server {
# 访问日志文件的写入位置,相对或绝对路径
access_log /path/to/file.log;

# 选择访问日志功能的开启(on)或关闭(off)
access_log on;

}

2.2、错误日志

错误日志记录服务器和请求处理过程中的错误信息。

代码语言:javascript
复制
server{
# 错误日志的写入位置
error_log logs/error.log error;
# 错误日志的级别,分为 debug, info, notice, warn, error, crit, alert,emerg,其取值范围是按紧急程度从低到高排列
# 只有日志的错误级别等于或高于level指定的值才会写入错误日志中。默认值是error
error_log file [level];
}

3、配置域名

代码语言:javascript
复制
server {
# 监听domain.com
server_name domain.com;

# 监听多个域名
server_name domain.com www.domain.com;

# 监听所有域名
server_name *.domain.com;

# 监听所有顶级域名
server_name domain.*;

# 监听未指定的主机名(比如侦听IP地址本身)
server_name "";  

}

4、静态资源

代码语言:javascript
复制
server {
listen 80;
server_name domain.com;

location / {
    # 设置网站的根目录    
    root /path/to/website;
} 

}

5、重定向

5.1、网站根目录重定向
代码语言:javascript
复制
server {
listen 80;
server_name www.domain.com;
# 将 www.domain.com 进行301重定向,跳转至 http://domain.com$request_uri
return 301 http://domain.com$request_uri;
}
5.2、特定目录重定向
代码语言:javascript
复制
server {
listen 80;
server_name www.domain.com;

# 将链接 http://www.domain.com/redirect-url 进行301重定向,跳转到http://otherdomain.com
location /redirect-url {
    return 301 http://otherdomain.com;
}

}

如将 domain.com 永久重定向到 www.domain.com

代码语言:javascript
复制
server {
listen 80;
server_name domain.com;
return 301 http://www.hostrequest_uri;
}

6、反向代理

反向代理 - 维基百科,自由的百科全书 (wikipedia.org)

Reverse proxy - Wikipedia

代码语言:javascript
复制
server {
listen 80;
server_name domain.com;

# 对特定主机的3000端口进行反向代理
location / {
    proxy_pass http://0.0.0.0:3000;
}

}

7、负载均衡

负载均衡 - 维基百科,自由的百科全书 (wikipedia.org)

Load balancing (computing) - Wikipedia

代码语言:javascript
复制
upstream node_js {
server 0.0.0.0:3000;
server 0.0.0.0:4000;
server 123.131.121.122;
}

server {
listen 80;
server_name domain.com;

location / {  
    proxy_pass http://node_js;
}

}

8、SSL配置

代码语言:javascript
复制
server {
listen 443 ssl;
server_name domain.com;

ssl on;
# 证书文件,格式不一定都是pem,还可能是其他格式
ssl_certificate /path/to/cert.pem;
# 秘钥文件,格式不一定都是pem,还可能是其他格式
ssl_certificate_key /path/to/privatekey.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_session_timeout 1h;
ssl_session_cache shared:SSL:50m;
add_header Strict-Transport-Security max-age=15768000;

}

将HTTP永久重定向到HTTPS

server {
listen 80;
server_name domain.com;
return 301 https://hostrequest_uri;
}

部分内容转载修改自:
Nginx Cheatsheet (hashnode.dev)
Nginx日志配置详解_biubiuli的博客-CSDN博客_nginx 日志配置