1. 启动?停止?reload配置
nginx -s reload # 热重启
nginx -s reopen # 重启Nginx
nginx -s stop # 快速关闭
nginx -s quit # 等待工作进程处理完成后关闭
nginx -T # 查看配置文件的实际内容
2. nginx如何做反向http代理
location ^~ /api {
proxy_pass http://192.168.40.174:32020;
}
3. nginx要如何配置才能处理跨域问题
location ^~ /p/asm {
proxy_pass http://192.168.40.174:32020;
add_header 'Access-Control-Allow-Origin' '*' always;
add_header 'Access-Control-Allow-Credentials' 'true' always;
add_header 'Access-Control-Allow-Methods' 'GET,POST,PUT,DELETE,PATCH,OPTIONS';
add_header 'Access-Control-Allow-Headers' 'Content-Type,ssid';
if ($request_method = 'OPTIONS') {return 204;}
proxy_redirect off;
proxy_set_header Host $host;
}
4. 如何拦截某个请求,直接返回某个状态码?
location ^~ /p/asm {
return 204 "OK";
}
5. 如何给某个路径的请求设置独立的日志文件?
location ^~ /p/asm {
access_log /var/log/nginx/a.log;
error_log /var/log/nginx/a.err.log;
}
6. 如何设置nginx的静态文件服务器
location / {
add_header Cache-Control max-age=360000;
root /usr/share/nginx/html/webrtc-sdk/dist/;
}
# 如果目标地址中没有video, video只是用来识别路径的,则需要使用
# rewrite指令去去除video路径
# 否则访问/video 就会转到 /home/resources/video 路径
location /video {
rewrite /video/(.*) /$1 break;
add_header Cache-Control max-age=360000;
autoindex on;
root /home/resources/;
}
7. 反向代理时,如何做路径重写?
使用 rewrite 指令,例如
rewrite /p/(.*) /$1 break;
8. Nginx如何配置才能做websocket代理?
location ^~ /websocket {
proxy_pass http://192.168.40.174:31089;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
}
9. 如何调整nginx的最大打开文件限制
设置worker_rlimit_nofile
user root root;
worker_processes 4;
worker_rlimit_nofile 65535;
10. 如何判断worker_rlimit_nofile是否生效?
11. 直接返回文本
location / {
default_type text/plain;
return 502 "服务正在升级,请稍后再试……";
}
location / {
default_type text/html;
return 502 "服务正在升级,请稍后再试……";
}
location / {
default_type application/json;
return 502 '{"status":502,"msg":"服务正在升级,请稍后再试……"}';
}
13. 多种日志格式
例如,不通的反向代理,使用不同的日志格式。
例如下面,定义了三种日志格式main, mian1, main2。
在access_log 指令的路径之后,指定日志格式就可以了。
http {
log_format main '$time_iso8601 $remote_addr $status $request';
log_format main2 '$remote_addr $status $request';
log_format main3 '$status $request';
access_log /var/log/nginx/access.log main;
14. 权限问题
例如某些端口无法监听,则需要检查是否被selinux给拦截了。 或者nginx的启动用户不是root用户导致无法访问某些root用户的目录。