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用户的目录。

参考