1. 启动?停止?reload配置

  1. nginx -s reload # 热重启
  2. nginx -s reopen # 重启Nginx
  3. nginx -s stop # 快速关闭
  4. nginx -s quit # 等待工作进程处理完成后关闭
  5. nginx -T # 查看配置文件的实际内容

2. nginx如何做反向http代理

  1. location ^~ /api {
  2. proxy_pass http://192.168.40.174:32020;
  3. }

3. nginx要如何配置才能处理跨域问题

  1. location ^~ /p/asm {
  2. proxy_pass http://192.168.40.174:32020;
  3. add_header 'Access-Control-Allow-Origin' '*' always;
  4. add_header 'Access-Control-Allow-Credentials' 'true' always;
  5. add_header 'Access-Control-Allow-Methods' 'GET,POST,PUT,DELETE,PATCH,OPTIONS';
  6. add_header 'Access-Control-Allow-Headers' 'Content-Type,ssid';
  7. if ($request_method = 'OPTIONS') {return 204;}
  8. proxy_redirect off;
  9. proxy_set_header Host $host;
  10. }

4. 如何拦截某个请求,直接返回某个状态码?

  1. location ^~ /p/asm {
  2. return 204 "OK";
  3. }

5. 如何给某个路径的请求设置独立的日志文件?

  1. location ^~ /p/asm {
  2. access_log /var/log/nginx/a.log;
  3. error_log /var/log/nginx/a.err.log;
  4. }

6. 如何设置nginx的静态文件服务器

  1. location / {
  2. add_header Cache-Control max-age=360000;
  3. root /usr/share/nginx/html/webrtc-sdk/dist/;
  4. }
  5. # 如果目标地址中没有video, video只是用来识别路径的,则需要使用
  6. # rewrite指令去去除video路径
  7. # 否则访问/video 就会转到 /home/resources/video 路径
  8. location /video {
  9. rewrite /video/(.*) /$1 break;
  10. add_header Cache-Control max-age=360000;
  11. autoindex on;
  12. root /home/resources/;
  13. }

7. 反向代理时,如何做路径重写?

  1. 使用 rewrite 指令,例如
  2. rewrite /p/(.*) /$1 break;

8. Nginx如何配置才能做websocket代理?

  1. location ^~ /websocket {
  2. proxy_pass http://192.168.40.174:31089;
  3. proxy_http_version 1.1;
  4. proxy_set_header Upgrade $http_upgrade;
  5. proxy_set_header Connection "Upgrade";
  6. }

9. 如何调整nginx的最大打开文件限制

设置worker_rlimit_nofile

  1. user root root;
  2. worker_processes 4;
  3. worker_rlimit_nofile 65535;

10. 如何判断worker_rlimit_nofile是否生效?

11. 直接返回文本

  1. location / {
  2. default_type text/plain;
  3. return 502 "服务正在升级,请稍后再试……";
  4. }
  5. location / {
  6. default_type text/html;
  7. return 502 "服务正在升级,请稍后再试……";
  8. }
  9. location / {
  10. default_type application/json;
  11. return 502 '{"status":502,"msg":"服务正在升级,请稍后再试……"}';
  12. }

13. 多种日志格式

例如,不通的反向代理,使用不同的日志格式。

例如下面,定义了三种日志格式main, mian1, main2。

在access_log 指令的路径之后,指定日志格式就可以了。

  1. http {
  2. log_format main '$time_iso8601 $remote_addr $status $request';
  3. log_format main2 '$remote_addr $status $request';
  4. log_format main3 '$status $request';
  5. access_log /var/log/nginx/access.log main;

14. 权限问题

例如某些端口无法监听,则需要检查是否被selinux给拦截了。
或者nginx的启动用户不是root用户导致无法访问某些root用户的目录。

参考