不安分的黑娃
踏踏实实,坚持学习,慢慢就懂了~

1. 参考资料

2. Nginx 配置

2.1 Nginx 目录结构

nginx-1.20.2
  |
  |--- nginx.exe
  |
  |--- conf
  |      |--- nginx.conf #nginx配置文件
  |      |--- mime.types
  |      |--- fastcgi.conf
  |      |--- fastcgi_params
  |      |--- koi-utf
  |      |--- koi-win
  |      |--- scgi_params
  |      |--- uwsgi_params
  |      |--- win-utf
  |
  |--- html
  |      |--- 50x.html
  |      |--- index.html
  |
  |--- logs
  |
  |--- temps
  |
  |--- docs
  |
  |--- contrib

2.2 nginx.conf 结构

nginx.conf
  |
  |--- main    // 
  |
  |--- events
  |
  |--- http
        |
        |--- server
               |--- location

nginx 配置文件主要由 main、events、http、server、location 块组成。每个块的作用:

  • main : 主要控制子进程所属的用户和用户组、派生子进程数、错误日志位置、pid进程文件位置与级别、子进程优先级、进程对应 CPU以及进程能够打开的最大文件描述符等。
    • events:控制 Nginx 处理连接方式
  • http:Nginx 处理 HTTP 请求的主要配置块
  • server: Nginx 中虚拟主机配置块,可配置多个虚拟主机
  • location: server 中对应目录级别的控制块,可以有多个

nginx.conf 内容:


#user  nobody;
worker_processes  1; 

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    #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  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            index  index.html index.htm;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }


    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}


    # HTTPS server
    #
    #server {
    #    listen       443 ssl;
    #    server_name  localhost;

    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;

    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;

    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}

}

2.3 nginx.conf 配置详解

Nginx 配置文件中默认配置指令含义:

  • worker_processes:配置 Nginx 工作进程数,一般是 CPU核数或CPU核数的2倍
  • worker_connections: 配置 Nginx 允许单个进程并发连接的最大请求数
  • include:用于引入配置文件
  • default_type:设置默认文件类型
  • sendfile:默认值为 on,表示开启高速文件传输模式。
  • listen:监听端口
  • server_name:设置主机域名,用于和 HTTP 请求头中的“Host”域匹配
  • root:主机站点的根目录地址,即应用目录
  • index:指定默认索引文件,一般为 index.html
  • error_page:错误页面,比如 404.html

更多指令参见:https://nginx.org/en/docs/dirindex.html

2.3.1 配置子进程的用户和用户组

Nginx 是由一个主进程和多个工作进程组成的,主进程一般是 root 用户启动,工作进程默认是 nobody 用户启动。nobody 用户是一个不能登录的用户。

nginx.conf:

# user [用户名] [用户组名]
user nouser nogroup; # 表示用户是nouser,用户组是nogroup

2.3.2 自定义错误页面

nginx 使用 error_page 指令配置错误页面。
error_page 指令语法:

error_page code ... [=[response]] uri;
# code: HTTP 错误码
# =response : 修改响应的错误码,匹配到的错误码统一返回 response
# uri : 转发的地址

error_page 指令可放置的上下文:http, server, location, if in location

  1. 为每种错误设置单独的处理方式
error_page 403 /403.html
error_page 404 /404.html
  1. 利用在线资源处理错误
error_page 403 http://backend/forbidden
error_page 500 502 503 504 http://backend/error
  1. 更改响应编码
error_page 404 =200 /404.html

2.3.3 访问控制

Nginx 提供了 2 个配置访问控制权限的指令: allow,deny

  1. allow 指令
语法:allow address | CIDR | unix: | all;
上下文:http, server, location, limit_except
  1. deny 指令
语法:deny address | CIDR | unix: | all;
上下文:http, server, location, limit_except

注意

  • 单个IP指定范围最小,all指定范围最大
  • 同一个块中,若同时存在多个 allow/deny 指令配置,那么先出现的访问权限生效,会覆盖之后相同范围的设置。
  • 当多个块(http,server,location)中都出现了权限设置,则内层的块设置优先级最高。

2.3.4 location 指令

location指令

语法: location [ = | ~ | ~* | ^~ ] uri { ... }
      location @name { ... }
上下文:	server, location

location 前缀

  • =:根据其后的模式进行精确匹配,必须完全一致才能执行之后的指令块
  • ~:使用正则表达式完成 location 匹配,区分大小写
  • ~*:使用正则表达式完成 location 匹配,不区分大小写
  • ^~:不使用正则表达式匹配,以指定模式为开头匹配 location
  • @:用于定义一个 location块,外部客户端无法访问只能是 nginx 内部配置指令访问

location 前缀遵循“最大前缀匹配”,即前缀匹配最多的优先

# "localtion / {...}" 和 "localtion =/ {...}"区别:
(1)localtion / {...} 遵循最大前缀匹配原则,相当于站点的默认配置
(2)localtion =/ {...} 精确匹配,只能匹配网站根目录

2.3.5 日志文件

2.3.5.1 访问日志

nginx 使用 log_formataccess_log指令配置访问日志。

log_format 指定日志打印格式;access_log指令指定访问日志路径。

  1. log_format 指令:
语法:   log_format name [escape=default|json|none] string ...;
默认值: log_format combined "...";
上下文: http

nginx.conf :

http {
    ...
    #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  logs/access.log  main;// main 是日志格式的名字。
    ...
}

日志格式相关的内置变量

  • $remote_addr:客户端IP
  • $remote_user:客户端用户名,用于记录浏览者进行身份认证时的用户名,没有验证则为空
  • $time_local:访问的时间与时区
  • $request:请求的 URI 和 HTTP 协议版本
  • $status:请求返回的 HTTP 状态码
  • $body_bytes_sent:发送给客户端 body 内容大小
  • $http_referer:来路 URL 地址
  • $http_user_agent:客户端浏览器引擎
  • $http_x_forwarded_for:客户端IP地址列表(包括中间经过的代理)
  1. access_log指令
语法:    access_log path [format [buffer=size] [gzip[=level]] [flush=time] [if=condition]];
access_log off;
默认配置:    access_log logs/access.log combined;
上下文:    http, server, location, if in location, limit_except

关闭访问日志:

access_log off;
2.3.5.2 错误日志

nginx 使用 error_log 指令配置错误日志。

默认配置:

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
语法:      error_log file [level];
默认配置:  error_log logs/error.log error;
上下文:    main, http, mail, stream, server, location

关闭错误日志:

error_log /dev/null
2.3.5.3 日志切割
  1. 自动切割
    编写以下脚本,进行日志切割
#!/bin/bash

# 1.指定日志文件路径
log_path="/usr/local/nginx/logs"
# 2.备份日志文件
mv $log_path/access_log.log $log_path/`date + "%Y%m%d%H%M"`.log
# 3.nginx 重新打开文件
/usr/local/nginx/nginx -s reopen

2.3.6 虚拟主机

2.3.6.1 基于端口号配置虚拟主机

原理是一个Nginx 监听多个端口,根据不同的端口号区分不同的应用。

http {
    server {
        # 基于 8000 端口
        listen       8000;
        server_name  192.168.20.1;

        location / {
            # 网站根目录是 html/8000 文件夹
            root   html/8000;
            index  index.html index.htm;
        }
    }

    server {
        # 基于 9000 端口
        listen       9000;
        server_name  192.168.20.1;

        location / {
            # 网站根目录是 html/9000 文件夹
            root   html/9000;
            index  index.html index.htm;
        }
    }
}
2.3.6.2 基于 IP 配置虚拟主机
http {
    server {
        # 基于 8000 端口
        listen       8000;
        # 基于IP
        server_name  192.168.30.1;

        location / {
            # 网站根目录是 html/192.168.30.1 文件夹
            root   html/192.168.30.1;
            index  index.html index.htm;
        }
    }
	
    server {
        # 基于 8000 端口
        listen       8000;
        # 基于IP
        server_name  192.168.30.2;

        location / {
            # 网站根目录是 html/192.168.30.2 文件夹
            root   html/192.168.30.2;
            index  index.html index.htm;
        }
    }
}
2.3.6.3 基于域名配置虚拟主机
http {
    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    server {
        # 基于 80 端口
        listen       80;
        # 基于域名
        server_name  www.lihwstudy.com;

        location / {
            # 网站根目录是 html 文件夹
            root   html;
            index  index.html index.htm;
        }
    }
}
2.3.6.4 server_name指令

server_name指令配置主要用于和 HTTP 请求头中“Host”域进行匹配

语法:  server_name name ...;
默认配置: server_name "";
上下文: server

虚拟主机名字支持通配符、正则表达式匹配。

server_name 匹配优先级

1. 精确匹配最高
2. 以“*”开头的最长通配符匹配
3. 以“*”结尾的最长通配符匹配
4. 第一个匹配的正则表达式
2.3.6.5 设置目录列表

Nginx 默认不允许列出所有目录,当用户访问站点时,且站点下没有index指定的默认索引文件,那么会报 403 forbidden。

nginx 使用autoindex指令设置网站目录列表;

语法:   autoindex on | off;
默认配置:  autoindex off;
上下文:    http, server, location

nginx 使用autoindex_exact_size指令设置是否显示文件大小;

语法: autoindex_exact_size on | off;
默认配置: autoindex_exact_size on;
上下文: http, server, location

autoindex_localtime 设置显示服务器时间;

语法:  autoindex_localtime on | off;
默认配置: autoindex_localtime off;
上下文: http, server, location
2.3.6.6 引入子配置文件

nginx 使用 include 指令引入子配置文件。

语法:	include file | mask;
上下文:	any

2.3.7 连接数优化

# worker_processes 设置工作进程个数,auto 将按照CPU核心数控制
worker_processes auto;
# 最大打开文件个数
worker_rlimit_nofile 65535;
events { 
    # 设置每个工作进程最大连接数
    worker_connections 65535;
    # 是否允许一个工作进程响应多个请求
    multi_accept on;
}

2.3.8 客户端并发请求控制

这里需要用到几个指令:

  • limit_conn:限制并发连接数
  • limit_conn_zone:开辟一个共享内存空间保存客户端IP
# key :存储的 key
# name:空间名字
# size:空间大小
语法:	limit_conn_zone key zone=name:size;
上下文:	http
# 1mb 空间可以保留 32000条 32字节的状态或16000条 64字节状态. 
  • limit_rate:服务器在响应时传输速率限制
  • limit_rate_after:用于在已经传出固定大小数据后,再开始限速
  1. 限制同一个 IP 的并发数
http {
    # $binary_remote_addr 客户端IP二进制
    # 开辟一块名字为 perip 大小为 10m,用于存储IP和其连接数
    limit_conn_zone $binary_remote_addr zone=perip:l0m;
    limit_conn perip 10;
}

  1. 限制虚拟主机的并发数
http {
    limit_conn_zone $server_name zone=zonename:l0m;
    
    server {
        listen 80;
        server_name localhost;
        limit_conn zonename 10;
    }
}

  1. 限制响应传输速率
http {
    # 100kb/s
    limit_rate 100k;
	# 传输10m后再限速
    limit_rate_after 10m;
    
}

在传输10m以后,限制速率为 100kb/s

2.3.9 缓存优化

expires指令为静态资源设置过期时间。

会修改响应码为200, 201 , 204, 206, 301, 302, 303, 304, 307 , 308 的响应头中“Expires” 和 “Cache-Control”域

# epoch:
# max:表示 10年后
# off:关闭
语法:     expires [modified] time;
            expires epoch | max | off;
默认配置:    expires off;
上下文:    http, server, location, if in location

time的值:参见 https://nginx.org/en/docs/syntax.html

2.4 nginx.conf 配置例子

2.4.1 反向代理

http {
    server {
        # 基于 80 端口
        listen       80;
        server_name  www.lihwstudy.com;
        # 将所有访问  www.lihwstudy.com 域名的请求都转发到 http://192.168.10.1:8080/
        location / {
            proxy_pass http://192.168.10.1:8080/
        }
    }
	
    server {
        # 基于 80 端口
        listen       80;
        server_name  www.lihwwork.com;
        # 将所有访问  www.lihwwork.com 域名的请求都转发到 http://192.168.10.2:8080/
        location / {
            proxy_pass http://192.168.10.2:8080/
        }
    }
}

Nginx 提供的反向代理的指令

  • proxy_pass:设置后端服务器地址
语法:	proxy_pass URL;
上下文:	location, if in location, limit_except
  • proxy_set_header:在请求发送给服务器前,更改来自客户端请求头中的信息
语法:     proxy_set_header field value;
默认配置:    proxy_set_header Host $proxy_host;
            proxy_set_header Connection close;
上下文:    http, server, location
  • proxy_connect_timeout:配置尝试连接的超时时间
语法:	proxy_connect_timeout time;
默认配置:	proxy_connect_timeout 60s;
上下文:	http, server, location

  • proxy_read_timeout:Nginx 向服务器发出read 请求后,等待响应的超时时间
语法:        proxy_read_timeout time;
默认配置:    proxy_read_timeout 60s;
上下文:      http, server, location
  • proxy_send_timeout:Nginx 向服务器发出 write 请求后,等待响应的超时时间
语法:       proxy_send_timeout time;
默认配置:   proxy_send_timeout 60s;
上下文:     http, server, location
  • proxy_redirect:修改服务器返回的响应头中的 Location 和 refresh
语法:       proxy_redirect default;
           proxy_redirect off;
           proxy_redirect redirect replacement;
默认配置:   proxy_redirect default;
上下文:     http, server, location

2.4.2 负载均衡

nginx 使用upstream指令配置负载均衡。upstream指令属于 ngx_http_upstream_module 模块

ngx_http_upstream_module 模块定义一组服务器,可以被proxy_pass, fastcgi_pass, uwsgi_pass, scgi_pass, memcached_pass, and grpc_pass 指令引用

语法:    upstream name { ... }
上下文:   http

配置例子:

upstream 服务器组名 {
    server backend1.example.com       weight=5;
    server backend2.example.com:8080;
    server unix:/tmp/backend3;

    server backup1.example.com:8080   backup;
    server backup2.example.com:8080   backup;
}

server {
    location / {
        proxy_pass http://服务器组名;
    }
}

负载均衡配置方式

  • 轮询
  • 权重
  • ip_hash
  • 第三方模块
2.4.2.1 轮询
# 配置负载均衡服务器组
upstream web_server {
    server 192.168.20.1;
    server 192.168.20.2;
}

server {
    listen 80
    server_name www.lihwstudy.com
    location / {
        proxy_pass http://web_server;
    }
}
2.4.2.2 加权轮询

可以添加 weight 参数指定权重。

# 配置负载均衡服务器组
upstream web_server {
    server 192.168.20.1 weight=1;
    server 192.168.20.2 weight=3;
}

server {
    listen 80
    server_name www.lihwstudy.com
    location / {
        proxy_pass http://web_server;
    }
}

upstream 块中 server指令:

语法:     server address [parameters];
上下文:    upstream

server指令参数:

- weight=number 权重,默认值1
- max_conns=number 单个服务最大连接数,0代表不限制
- max_fails=number 最大失败尝试次数,默认 1 次。
- fail_timeout=time 经历了 max_fails 次失败后,暂停服务的时间,默认 10 秒
- backup 预留的备份机器,不能和hash, ip_hash, random搭配使用
- down  表示当前 server 不参与负载均衡
- resolve 服务器域名对应的IP地址如果如发生改变,会自动改变配置文件,不需要重启 Nginx;必须在 http或 upstream块中声明resolver 指令。
- route=string 设置该服务器路由名字
- service=name 必须使用resolve参数才能生效
- slow_start=time 不健康的server等待多长时间恢复为健康,0表示禁止。不能和hash, ip_hash, random搭配使用

2.4.2.3 IP Hash

ip hash 是将每个请求按照客户端的IP的hash结果分配。

# 配置负载均衡服务器组
upstream web_server {
    ip_hash;
    server 192.168.20.1;
    server 192.168.20.2;
}

server {
    listen 80
    server_name www.lihwstudy.com
    location / {
        proxy_pass http://web_server;
    }
}

ip_hash 方式,server不能使用 backup和weight参数

2.4.2.4 第三方模块

以 fair 为例:

(1)备份原来的nginx
(2)重新编译安装nginx
github上下载 nginx-upstream-fair-master.zip
./configure --prefix=/usr/local/nginx --with-http_ssl_module --add-module=/root/nginx-upstream-fair
(3)打开新安装的nginx 配置文件添加负载均衡配置

# 配置负载均衡服务器组
upstream web_server {
    fair;
    server 192.168.20.1;
    server 192.168.20.2;
}

server {
    listen 80
    server_name www.lihwstudy.com
    location / {
        proxy_pass http://web_server;
    }
}

2.4.3 防盗链

valid_referers指令:

Syntax:	valid_referers none | blocked | server_names | string ...;
Default:	—
Context:	server, location

valid_referers指令参数:

  • none :请求头中没有 Referer域
  • blocked:请求头中有 Referer域,但是值被删了
  • server_names:请求头中有 Referer域包含一个服务器名字
  • 任意字符串:定义一个服务器名或URI前缀
  • 正则表达式:必须以“~”开头
location ~* \.(gif|jpg|png|swf|flv)$ {
    root html
    valid_referers none blocked *.nginxcn.com
    if( $invalid_referer) {
        # 如果请求头中声明了 Referer 值,$invalid_referer 变量值为空字符串;如果没有声明,那么$invalid _referer 变量值为 1。
        rewrite ^/ [www.nginx.cn](http://www.nginx.cn)
        # return 404
    }
}

2.4.4 解决跨域

转自https://www.cnblogs.com/PengfeiSong/p/12993446.html

server{
        listen 5000;
        server_name localhost;
        
        location /test {
            proxy_pass http://localhost:3000/test;

            #   指定允许跨域的方法,*代表所有
            add_header Access-Control-Allow-Methods *;

            #   预检命令的缓存,如果不缓存每次会发送两次请求
            add_header Access-Control-Max-Age 3600;
            #   带cookie请求需要加上这个字段,并设置为true
            add_header Access-Control-Allow-Credentials true;

            #   表示允许这个域跨域调用(客户端发送请求的域名和端口) 
            #   $http_origin动态获取请求客户端请求的域   不用*的原因是带cookie的请求不支持*号
            add_header Access-Control-Allow-Origin $http_origin;
            #   表示请求头的字段 动态获取
            add_header Access-Control-Allow-Headers 
            $http_access_control_request_headers;

            #   OPTIONS预检命令,预检命令通过时才发送请求
            #   检查请求的类型是不是预检命令
            if ($request_method = OPTIONS){
                return 200;
            }
        }
    }

3. Nginx 高可用方案

Nginx + Keepalived 实现 Nginx 服务的高可用。

Keepalived 下载地址:https://www.keepalived.org/download.html

  1. 主服务器Keepalived配置
vrrp_script chk_nginx {        # 配置用于检测Nginx运行状态的脚本
    script "/chk_nginx.sh"     # 脚本路径
    interval 2                 # 每 2 秒调用1次脚本
    weigth -20                 # 当检测失败时,权重发生变化
}


vrrp_instance VT_1 {           # 配置一个虚拟路由,名字为 VT_1
   state MASTER                # 指定 keepalived 角色 MASTER 或 BACKUP
   interface eth0              # 指定检测的网卡
   virtual_router_id  21       # 虚拟路由的标识,同一个 VRRP 的 MASTER 或 BACKUP 一致
   mcast_src_ip 192.168.10.1   # 设置真实 IP  (可忽略,默认使用主网卡的IP)
   priority 100                # 优先级、权重,范围 0~254
   advert_int 1                # MASTER 和 BACKUP 之间同步检查时间间隔,单位:秒。
   authentication {            # 设置验证和密码
       auth_type PASS          # 验证类型,PASS 表示用密码
       auth_pass 123456        # 设置密码,用于 MASTER 和 BACKUP 使用相同密码通信
   }
   virtual_ipaddress {         # 设置虚拟IP地址池,每行1个
       192.168.10.10           # 为  MASTER 或 BACKUP 设置相同的 虚拟IP
   }
   track_script {
       chk_nginx
   }
}
  1. 从服务器Keepalived配置
vrrp_script chk_nginx {        # 配置用于检测Nginx运行状态的脚本
    script "/chk_nginx.sh"     # 脚本路径
    interval 2                 # 每 2 秒调用1次脚本
    weigth -20                 # 当检测失败时,权重发生变化
}

vrrp_instance VT_1 {           # 配置一个虚拟路由,名字为 VT_1
   state BACKUP                # 指定 keepalived 角色 MASTER 或 BACKUP
   interface eth0              # 指定检测的网卡
   virtual_router_id  21       # 虚拟路由的标识,同一个 VRRP 的 MASTER 或 BACKUP 一致
   mcast_src_ip 192.168.10.1   # 设置真实 IP  (可忽略,默认使用主网卡的IP)
   priority 90                # 优先级、权重,范围 0~254,比主服务低即可
   advert_int 1                # MASTER 和 BACKUP 之间同步检查时间间隔,单位:秒。
   authentication {            # 设置验证和密码
       auth_type PASS          # 验证类型,PASS 表示用密码
       auth_pass 123456        # 设置密码,用于 MASTER 和 BACKUP 使用相同密码通信
   }
   virtual_ipaddress {         # 设置虚拟IP地址池,每行1个
       192.168.10.10           # 为  MASTER 或 BACKUP 设置相同的 虚拟IP
   }
   track_script {
       chk_nginx
   }
}
  1. 检测 nginx 服务脚本
    chk_nginx.sh:
#!/bin/bash
if [ `ps -C nginx --no-header | wc -l ` -eq 0 ];then
    service nginx start
    sleep 2
    if [ `ps -C nginx --no-header | wc -l ` -eq 0 ];then
         service keepalived stop
    fi
fi

4.Nginx 命令

nginx 脚本使用例子:

 nginx [-?hvVtTq] [-s signal] [-p prefix]
       [-e filename] [-c filename] [-g directives]
# 参数含义说明:
# h:帮助
# v:显示 Nginx 版本并退出
# V:显示 Nginx 版本和配置选项然后退出
# t:测试配置并退出
# T:测试配置,dump 配置并退出
# q:在测试配置过程中,不打印非错误信息
# s:给主进程发送信号
# p:设置前缀 path
# e:设置 error 日志文件
# c: 设置配置文件
# g: 设置配置文件以外的全局指令

使用例子:

# 1. 启动时指定配置文件
./nginx -c /usr/local/nginx/conf/nginx.conf
# 2. 设置路径前缀
./nginx -p /usr/local/nginx/ -c conf/nginx.conf

# 3. 设置错误日志
./nginx -e /usr/local/nginx/logs/error.log

# 4. 立马停止 nginx
./nginx -s stop

# 5. 平滑停止 nginx
./nginx -s quit

# 6. 重新打开日志文件
./nginx -s reopen
# 7. 重新加载 Nginx 配置
./nginx -s reload

# 8.设置全局配置
nginx -g "pid /var/run/nginx.pid; worker_processes `sysctl -n hw.ncpu`;"

posted on 2022-10-05 19:55  不安分的黑娃  阅读(50)  评论(0编辑  收藏  举报