跳到主要内容

Nginx 配置与优化

重启 Nginx 服务

为了安全地重启 Nginx 服务,笔者使用以下命令。该命令将在停止服务后立即重新启动,减少停机时间。

sudo systemctl restart nginx

配置 HTTPS

为了通过 HTTPS 提供服务,首先需要从证书颁发机构(CA)获取 SSL 证书,并配置服务器使用这些证书。笔者在 Nginx 中配置 SSL 的基本步骤如下。

server {
listen 443 ssl
server_name your_domain.com # 将 your_domain.com 替换为您的域名

ssl_certificate /etc/nginx/conf.d/ssl_certificate.crt # 指向您的证书文件
ssl_certificate_key /etc/nginx/conf.d/ssl_private_key.key # 指向您的私钥文件

# 配置支持的 SSL 协议版本
ssl_protocols TLSv1.2 TLSv1.3

# 配置加密套件
ssl_ciphers HIGH:!aNULL:!MD5

# 其他 Nginx 配置...
}

请确保将 your_domain.com 替换为您的实际域名,并正确设置证书和私钥文件的路径。

配置反向代理

在启用 HTTPS 的同时,可能需要配置反向代理,将请求转发到内部服务。以下是一个示例配置,它将所有传入的 HTTPS 请求转发到本地的 20001 端口。

server {
listen 443 ssl
server_name sumingcheng.cn # 将 sumingcheng.cn 替换为您的域名

ssl_certificate /etc/nginx/conf.d/sumingcheng.cn_bundle.crt # 指向您的证书文件
ssl_certificate_key /etc/nginx/conf.d/sumingcheng.cn.key # 指向您的私钥文件

# 配置支持的 SSL 协议版本
ssl_protocols TLSv1.2 TLSv1.3

# 配置加密套件
ssl_ciphers HIGH:!aNULL:!MD5

location / {
proxy_pass http://localhost:20001;
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_set_header X-Forwarded-Proto $scheme;
proxy_read_timeout 90;
proxy_connect_timeout 90;
}

# 其他 Nginx 配置...
}

在此配置中,请将 sumingcheng.cn 替换为您的实际域名。proxy_pass 指令用于将请求转发到本地的 20001 端口,确保后端服务在该端口上监听。

反向代理优化

为了提高反向代理的性能和效率,笔者在配置中加入了以下优化参数。

# 关闭代理缓冲,立即转发客户端请求和后端响应
proxy_buffering off

# 启用分块传输编码,允许服务器分块发送动态内容
chunked_transfer_encoding on

# 开启 TCP_NOPUSH,尽可能合并数据包发送,提高网络效率
tcp_nopush on

# 开启 TCP_NODELAY,立即发送小数据包,减少网络延迟
tcp_nodelay on

# 设置保持连接的超时时间,这里设置为 120 秒
keepalive_timeout 120

这些参数可以根据需要放置在 httpserverlocation 块中进行配置。

注意事项

确保证书和私钥文件的权限正确,防止未经授权的访问。

可以使用 Let's Encrypt 免费获取 SSL 证书,并设置自动更新。

修改配置文件后,使用以下命令检查语法是否正确:

sudo nginx -t

如果 Nginx 无法启动或配置未生效,请查看 /var/log/nginx/error.log 获取更多信息。

定期更新 Nginx 和相关组件,及时应用安全补丁。