nginx | 基本使用

1,093 阅读1分钟

一、基本使用

1、常用命令
  • ​ nginx:启动 Nginx
  • ​ nginx -s stop:立刻停止 Nginx 服务
  • ​ nginx -s reload:重新加载配置文件
  • ​ nginx -s quit:平滑停止 Nginx 服务
  • ​ nginx -t:测试配置文件是否正确
  • ​ nginx -v:显示 Nginx 版本信息
  • ​ nginx -V:显示 Nginx 版本信息、编译器和配置参数的信息

二、docker运行nginx

1、运行和挂载
//nginx服务器静态资源目录: /usr/share/nginx/html
//nginx 配置文件目录: /etc/nginx/nginx.conf
//nginx log目录:/var/log/nginx

//挂载时自己先mkdir好目录和conf文件,50x.html 和 index.html也要先创建好。
mkdir conf conf.d html logs 
nginx.conf放在conf
default.conf放在conf.d

docker run -d --name nginx -p 80:80
-v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf 
-v $PWD/log:/var/log/nginx 
-v $PWD/html:/usr/share/nginx/html 
-v $PWD/conf.d/default.conf:/etc/nginx/conf.d/default.conf nginx:latest

//修改配置后,重新加载
docker exec -it nginx /etc/init.d/nginx reload
2、关于配置文件

自己需要先创建好nginx.confdefault.conf

  • default.conf(子配置文件) 可以将一个虚拟主机的配置文件单独拿出来,避免nginx.conf过于冗长;

    server{
        listen 80;
        server_name localhost;
    
        location / {
            root   /usr/share/nginx/html;
            index  index.html index.htm;
        }
    
        error_page   500 502 503 504  /50x.html;
            location = /50x.html {
            root   /usr/share/nginx/html;
        }
    }
    
  • nginx.conf(主配置文件)

    user  nginx;
    worker_processes  1;
    
    error_log  /var/log/nginx/error.log warn;
    pid        /var/run/nginx.pid;
    
    events {
        worker_connections  1024;
    }
    
    http {
        include       /etc/nginx/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  /var/log/nginx/access.log  main;
    
        sendfile        on;
        #tcp_nopush     on;
    
        keepalive_timeout  65;
    
        #gzip  on;
    
        include /etc/nginx/conf.d/*.conf;  #这里就包含default.conf文件进来了*/
    }
    

三、配置文件

1、http请求头的host

Host 是 HTTP 1.1 协议中新增的一个请求头,主要用来实现虚拟主机技术。

举个例子:

一台服务器部署着多个网站,每个网站都有一个域名。也就出现了一个ip对应多个域名的情况。

那么,怎么来区分每次根据域名显示出不同的网站的内容呢?

这就用到了host字段了。

备注:

在http 1.1中不能缺失host字段,如果缺失, 服务器返回400 bad request,http1.1中不能缺失host字段,但host字段可以是空值

在http 1.0中可以缺失host字段。

http_req_host:www.mylxs.com:90

server{
    listen       90; 
    server_name  www.mylxs.com;
}

server的匹配是包括域名+端口的;
2、配置文件基本结构
...              #全局块
events {         #events块
   ...
}

http      #http块
{
    ...   #http全局块
    server        #server块
    { 
        ...       #server全局块
        location [PATTERN]   #location块
        {
            ...
        }
        location [PATTERN] 
        {
            ...
        }
    }
    
    upstream 
    {
      ...
    }
    ...     #http全局块
}


1、全局块:配置影响nginx全局的指令。
一般有运行nginx服务器的用户组,nginx进程pid存放路径,日志存放路径,配置文件引入,允许生成worker process数等。

2、events块:配置影响nginx服务器或与用户的网络连接。
有每个进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网路连接,开启多个网络连接序列化等。

3、http块:可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。
如文件引入,mime-type定义,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数等。

4、server块:配置虚拟主机的相关参数,一个http中可以有多个server。

5、location块:配置请求的路由,以及各种页面的处理情况。

6、upstream块:负载均衡配置,一个upstream块代表着一组可以用于负载均衡的服务器列表;

一个http块可以有多个server{}块;也可以有多个upstream{}块;
一个server{}块里面,自然也可以有多个location{}块,代表着一个域名下的,多个应用路径;(同个域名部署多个web应用)
3、nginx中的server_name

server_name 为虚拟服务器的识别路径。

不同的域名会通过请求头中的HOST字段,匹配到特定的server块,转发到对应的应用服务器中去。

server_name的作用简单的说就是,根据不同域名找到对应的应用服务器;

4、参数解析
  • proxy_pass:配置反向代理的路径。需要注意的是如果 proxy_pass 的 url 最后为/,则表示绝对路径。否则(不含变量下)表示相对路径,所有的路径都会被代理过去

  • upstream:配置负载均衡,upstream 默认是以轮询的方式进行负载,另外还支持四种模式,分别是:

    - weight:权重,指定轮询的概率,weight 与访问概率成正比
    - ip_hash:按照访问 IP 的 hash 结果值分配
    - fair:按后端服务器响应时间进行分配,响应时间越短优先级别越高
    - url_hash:按照访问 URL 的 hash 结果值分配
    
5、常见配置项
  • 1、$remote_addr 与 $http_x_forwarded_for 用以记录客户端的ip地址;
  • 2、$remote_user :用来记录客户端用户名称;
  • 3、$time_local : 用来记录访问时间与时区;
  • 4、$request : 用来记录请求的url与http协议;
  • 5、$status : 用来记录请求状态;成功是200;
  • 6、$body_bytes_s ent :记录发送给客户端文件主体内容大小;
  • 7、$http_referer :用来记录从那个页面链接访问过来的;
  • 8、$http_user_agent :记录客户端浏览器的相关信息;
6、其他
  • 惊群现象:一个网路连接到来,多个睡眠的进程被同事叫醒,但只有一个进程能获得链接,这样会影响系统性能。
  • 每个指令必须有分号结束。