一、 nginx常用命令
cd usr/local/nginx/sbin 启动 或者./nginx
nginx -s quit 优雅停止nginx,有连接时会等连接请求完成再杀死worker进程
nginx -s reload 优雅重启,并重新载入配置文件nginx.conf
nginx -s reopen 重新打开日志文件,一般用于切割日志
nginx -v 查看版本
nginx -t 检查nginx的配置文件
nginx -h 查看帮助信息
nginx -V 详细版本信息,包括编译参数
nginx -c filename 指定配置文件
ps -ef|grep nginx 查看进程
nginx -t -c /etc/nginx/nginx.conf 或者 nginx -t 检查对nginx.conf文件的修改是否正确
二、 nginx defalut.conf跨域配置
worker_processes 1;
client_max_body_size 600m;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
server {
listen 9292;
server_name localhost;
add_header Access-Control-Allow-Credentials true;
add_header Access-Control-Allow-Origin http://101.200.198.179:8106;
add_header Access-Control-Allow-Methods 'POST,GET,OPTIONS,PUT,DELETE';
add_header Access-Control-Max-Age 3600;
#获取客户端ip
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#允许脚本访问的返回头
add_header Access-Control-Allow-Headers 'x-requested-with,content-type,Cache-Control,Pragma,Date,x-timestamp';
#允许自定义的头部,以逗号隔开,大小写不敏感
add_header Access-Control-Expose-Headers 'WWW-Authenticate,Server-Authorization';
location / {
root html; # 本地文件的路径
index index.html index.htm; # 访问index首页的文件
try_files $uri $uri/ /index.html #防止页面刷新404
#limit_rate 1280k; #限制速度
}
location web1/apis {
rewrite ^.+apis/?(.*)$ /$1 break;
proxy_pass http://101.200.198.179:8106;
}
location web2/apis {
rewrite ^.+apis/?(.*)$ /$1 break;
proxy_pass http://101.200.198.179:8106;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
ps:
配置文件:
装的nginx配置文件在/etc/nginx/conf.d/dafalut.conf
可在 location / {
root /root/zg; # 本地文件的路径
index index.html index.htm; # 访问index首页的文件
}
中自定义首页面路劲
三、 常见问题
1. 端口被占用解决:

2.解决413 Request Entity Too Large(文件传输限制):
修改nginx.conf
在http中加入
upload_max_filesize = 50M
nginx -s reload 重新加载即可解决
3.解决静态资源加载失败问题
浏览器报错:
net::ERR_CONTENT_LENGTH_MISMATCH 200 (OK)
解决:
1. 先切换到指定目录,在终端输入以下命令
cd /usr/local/var/run/nginx
2. 更改下权限,输入以下命令
sudo chmod -R 777 proxy_temp
3. 重启nginx,输入
sudo nginx -s relaod
四、 配置访问本地目录文件
location / {
charset utf-8;
root E:\l\vu3\dist\production; # 根目录地址
autoindex on; # 自动索引
index index.html index.htm; # 访问文件名称
}
五、解决刷新网页404问题
location 中配置
try_files $uri $uri/ /index.html #防止页面刷新404
六、配置解析压缩文件
# 开启gzip
gzip on;
# 开启gzip_static
# gzip_static 开启后可能会报错,需要安装相应的模块, 具体安装方式可以自行查询
# 只有这个开启,vue文件打包的.gz文件才会有效果,否则不需要开启gzip进行打包
gzip_static on;
gzip_proxied any;
gzip_min_length 1k;
gzip_buffers 4 16k;
#如果nginx中使用了多层代理 必须设置这个才可以开启gzip。
gzip_http_version 1.0;
gzip_comp_level 2;
gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
gzip_vary off;
gzip_disable "MSIE [1-6]\.";
# 开启 brotli压缩
# 需要安装对应的nginx模块,具体安装方式可以自行查询
# 可以与gzip共存不会冲突
brotli on;
brotli_comp_level 6;
brotli_buffers 16 8k;
brotli_min_length 20;
brotli_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript image/svg+xml;
七、配置流式数据吞吐(sse、视频流、实时监控、socket等)
如果本地和线上的数据流不一致,线上的慢或中断,那大概率是没配置proxy_buffering(禁用缓冲)和proxy_cache(禁用缓存)
proxy_buffering 指令用于控制 Nginx 是否将从后端服务器接收到的响应缓冲到内存或磁盘中。当 proxy_buffering 设置为 off 时,Nginx 不会缓冲后端服务器的响应,而是直接将响应传递给客户端。这对于需要实时传输数据的场景非常有用,例如视频流、实时日志等。
详细配置如下:
- 关闭缓存:为了确保SSE正常工作,需要禁用Nginx的缓存功能。通过
proxy_buffering off;和proxy_cache off;设置来关闭缓存。 - 设置连接升级:SSE需要使用持续连接,因此需要设置
Upgrade和Connection请求头。确保配置中包含Upgrade $http_upgrade;和Connection 'upgrade';。 - 调整超时设置:确保设置适当的超时时长,以避免SSE连接时间过短导致异常。您可以根据需要调整
proxy_connect_timeout和proxy_read_timeout等设置。
location / {
proxy_pass <http://127.0.0.1:8100>;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Connection '';
proxy_http_version 1.1; # 重要:确保使用HTTP/1.1协议
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
# 添加以下配置以处理SSE
proxy_buffering off;
proxy_cache off;
}
如果你只需为单独数据流接口配置,如下:
# sse配置
location /代理的接口标识(proxy)/aiAssistant/chat {
proxy_buffering off;
proxy_cache off;
proxy_pass 你的接口地址/aiAssistant/chat;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Cache-Control 'no-cache';
proxy_set_header Connection 'keep-alive';
proxy_read_timeout 86400s;
proxy_send_timeout 86400s;
}
Nginx 的安全配置是确保网站和应用程序安全的重要步骤。以下是一些常见的 Nginx 安全配置项及其详细解释,帮助你提升 Nginx 服务器的安全性。
八. nginx安全配置
1 限制访问
限制对敏感文件和目录的访问,防止未授权用户访问。
nginx
location ~ /.ht {
deny all;
}
location ~ /.git {
deny all;
}
2. 隐藏 Nginx 版本号
隐藏 Nginx 版本号可以减少被攻击的风险。
nginx
server_tokens off;
3. SSL/TLS 配置
3.1 启用 HTTPS
使用 SSL/TLS 加密通信,确保数据传输的安全性。
nginx
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /path/to/certificate.pem;
ssl_certificate_key /path/to/certificate.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256';
ssl_prefer_server_ciphers on;
}
3.2 HSTS(HTTP Strict Transport Security)
启用 HSTS,强制浏览器仅通过 HTTPS 访问网站。
nginx
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload";
3.3 OCSP Stapling
启用 OCSP Stapling,提高 SSL 握手的效率和安全性。
nginx
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;
4. 防止点击劫持
防止点击劫持攻击,确保用户不会在不知情的情况下被重定向到恶意网站。
nginx
add_header X-Frame-Options SAMEORIGIN;
5. 防止 MIME 类型嗅探
防止浏览器对响应内容进行 MIME 类型嗅探,避免潜在的安全风险。
nginx
add_header X-Content-Type-Options nosniff;
6. 防止 XSS 攻击
启用 XSS 保护,防止跨站脚本攻击。
nginx
add_header X-XSS-Protection "1; mode=block";
7. 防止 CSRF 攻击
虽然 Nginx 本身不直接提供 CSRF 保护,但可以通过设置适当的头部来增强安全性。
nginx
add_header Referrer-Policy "same-origin";
8. 防止缓存敏感数据
防止浏览器缓存敏感数据,确保用户隐私。
nginx
location /sensitive-data {
add_header Cache-Control "no-store, no-cache, must-revalidate, max-age=0";
add_header Pragma "no-cache";
}
9. 限制请求速率
限制请求速率,防止 DDoS 攻击。
nginx
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
server {
location / {
limit_req zone=one burst=5 nodelay;
}
}
10. 日志记录
启用详细的日志记录,便于监控和审计。
nginx
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
error_log /var/log/nginx/error.log;
11. 文件上传限制
限制文件上传的大小,防止大文件上传导致服务器资源耗尽。
nginx
client_max_body_size 10M;
12. 防火墙规则
使用防火墙规则进一步增强安全性,例如使用 fail2ban 来阻止恶意 IP 地址。
sh
sudo apt-get install fail2ban
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local
在 jail.local 文件中添加或修改以下内容:
ini
[nginx-http-auth]
enabled = true
port = http,https
filter = nginx-http-auth
logpath = /var/log/nginx/error.log
maxretry = 3
bantime = 3600
在 Nginx 中配置静态文件缓存可以显著提高网站的性能,减少服务器的负载,并加快用户的页面加载速度。以下是一些常见的 Nginx 配置示例,用于设置静态文件缓存。
九. nginx静态文件缓存配置
假设你希望为常见的静态文件(如图片、CSS、JavaScript 文件)设置缓存。
1. 基本配置
nginx
server {
listen 80;
server_name example.com;
root /var/www/html;
index index.html;
# 静态文件缓存配置
location ~* .(jpg|jpeg|png|gif|ico|css|js)$ {
expires 30d; # 设置缓存时间为 30 天
add_header Cache-Control "public, no-transform";
}
# 其他 location 块
location / {
try_files $uri $uri/ =404;
}
}
2. 详细的静态文件缓存配置
你可以为不同类型的静态文件设置不同的缓存时间。
nginx
server {
listen 80;
server_name example.com;
root /var/www/html;
index index.html;
# 图片文件缓存
location ~* .(jpg|jpeg|png|gif|ico)$ {
expires 30d; # 设置缓存时间为 30 天
add_header Cache-Control "public, no-transform";
}
# CSS 文件缓存
location ~* .css$ {
expires 14d; # 设置缓存时间为 14 天
add_header Cache-Control "public, no-transform";
}
# JavaScript 文件缓存
location ~* .js$ {
expires 14d; # 设置缓存时间为 14 天
add_header Cache-Control "public, no-transform";
}
# 其他 location 块
location / {
try_files $uri $uri/ =404;
}
}
3. 使用 map 指令优化缓存配置
使用 map 指令可以更灵活地设置缓存时间。
nginx
http {
# 定义缓存时间
map $sent_http_content_type $expires {
default 30d;
text/html 1h;
text/css 14d;
application/javascript 14d;
~image/ 30d;
}
server {
listen 80;
server_name example.com;
root /var/www/html;
index index.html;
# 静态文件缓存配置
location ~* .(jpg|jpeg|png|gif|ico|css|js)$ {
expires $expires;
add_header Cache-Control "public, no-transform";
}
# 其他 location 块
location / {
try_files $uri $uri/ =404;
}
}
}
4. 防止缓存敏感数据
对于敏感数据,可以设置不缓存。
nginx
server {
listen 80;
server_name example.com;
root /var/www/html;
index index.html;
# 静态文件缓存配置
location ~* .(jpg|jpeg|png|gif|ico|css|js)$ {
expires 30d; # 设置缓存时间为 30 天
add_header Cache-Control "public, no-transform";
}
# 敏感数据不缓存
location /sensitive-data {
add_header Cache-Control "no-store, no-cache, must-revalidate, max-age=0";
add_header Pragma "no-cache";
}
# 其他 location 块
location / {
try_files $uri $uri/ =404;
}
}
5. 504网关超时错误
如果前端配置xhr请求超齿没问题,再看后端网关服务,如果都没问题,那大概率就是nginx配置问题了; nginx如果没设置超时时间,读取的是默认的超时时间是60s;
- Nginx负载均衡超时配置改为6分钟
upstream uc_gateway{
server xxx;
server xxx;
server xxx;
# 超时配置
keepalive_timeout 360s; # 6分钟 = 360秒
keepalive_requests 1000; # 每个连接最大请求数
keepalive 32; # 保持连接数
keepalive_requests 100; # 每个连接最大请求数
keepalive_timeout 60s; # 连接超时时间
}
- 在location中添加代理超时配置
location / {
proxy_pass http://uc_gateway;
# 超时设置(6分钟)
proxy_connect_timeout 60s; # 连接超时:1分钟
proxy_send_timeout 360s; # 发送超时:6分钟
proxy_read_timeout 360s; # 读取超时:6分钟
# 其他代理配置
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}