02-Nginx基础配置+日志

一、Nginx-配置文件概述

   Nginx主要配置文件/etc/nginx/nginx.conf是一个纯文本类型的文件,整个配置文件是以区块的形式组织的。    Nginx主配置文件整体分为三块进行学习,分别是CoreModule(核心模块)EvenMoudule(事件驱动模块)HttpCoreModule(Http内核模块)   一般,每个区块以一对花括号{}来表示开始与结束。

`Coremodule核心模块`

    user  nginx;                              #nginx进程运行的用户
    worker_processes  1;          #nginx工作的进程数量
    error_log  /var/log/nginx/error.log warn; #nginx的错误日志【警告及其警告以上的都记录】
    pid  /var/run/nginx.pid;      #nginx进程运行后的进程id

`EvenMoudule(事件驱动模块)`

    events {
    worker_connections  1024;      #一个work进程的最大连接数
  use epool;                                  #使用epool网络模型
    }
`HttpCoreModule(Http内核模块)`

    http {
        include       /etc/nginx/mime.types;   #包含资源类型文件
        default_type  application/octet-stream;  #默认以下载方式传输给浏览器(前提是该资源在mime.types中无法找到)

     日志格式定义
        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   #包含哪个目录下面的conf文件

   server {                             #定义一个网站
          listen 80;                    #监听端口
          server_name  localhost;       #域名
          #charset koi8-r;              #字符集

    location / {                       #位置
          root   /usr/share/nginx/html;  #代码的主文件位置
          index  index.html index.htm;   #服务端默认返回给用户的文件
  }
    location /test {                   #位置
          root   /code/test/123/;        #代码的主文件位置
          index  index.html index.htm;   #服务端默认返回给用户的文件
  }
 }
`http server location扩展了解项`
http{}层下允许有多个Server{}层,一个Server{}层下又允许有多个Location
http{} 标签主要用来解决用户的请求与响应。
server{} 标签主要用来响应具体的某一个网站。
location{} 标签主要用于匹配网站具体URL路径。

二、Nginx-搭建web网站

#1.编写Nginx配置文件
[root@Server-1 conf.d]# cat game.conf
server {
 listen 80;
 server_name game.zxc.com;

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

2.根据配置文件,创建目录,上传代码
[root@Server-1  conf.d]# mkdir /code
[root@Server-1  conf.d]# cd /code
[root@Server-1  conf.d]# unzip html5.zip 

3.重载nginx服务
[root@Server-1 code]# systemctl restart nginx  #立即重启
[root@Server-1 code]# systemctl reload nginx  #平滑重启

4.配置域名解析(没有DNS情况下)
linux: vim /etc/hosts
192.168.2.4      game.zxc.com              
Windows:  C:WindowsSystem32driversetchosts
192.168.2.4      game.zxc.com 
Mac:   sudo vim /etc/hosts
192.168.2.4      game.zxc.com 

5.检查解析的是否是192.168.2.4   
C:UsersAdministrator>ping game.zxc.com   
正在 Ping game.zxc.com [192.168.2.4] 具有 32 字节的数据:
来自 192.168.2.4 的回复: 字节=32 时间=9ms TTL=64
来自 192.168.2.4 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.2.4 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.2.4 的回复: 字节=32 时间<1ms TTL=64

三、Nginx-虚拟主机

问题:通常在企业中可能会有很多业务系统,那么多套业务服务如何使用Nginx配置?答:不可能每个业务系统采用一台服务器,都是采用虚拟主机方式来实现一机跑多个业务系统

Nginx配置虚拟主机有如下三种方式:
方式一、基于主机多IP方式
方式二、基于端口的配置方式
方式三、基于多个hosts名称方式(多域名方式)

方式一、基于主机多IP方式

1.配置多网卡多IP的方式
[root@Server-1 conf.d]# cat ip.conf 
server {
 listen 192.168.2.4:80;
 server_name _;

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

server {
 listen 10.1.1.1:80;
 server_name _;

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

#2.根据配置创建目录
[root@Server-1 conf.d]#  mkdir /code_ip_eth0
[root@Server-1 conf.d]#  echo "Eth0" > /code_ip_eth0/index.html

[root@Server-1 conf.d]#  mkdir /code_ip_eth1
[root@Server-1 conf.d]#  echo "Eth1" > /code_ip_eth1/index.html

#3.查看语法是否有问题
[root@Server-1 /]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

#4.重启nginx服务
[root@Server-1 conf.d]#  systemctl restart nginx

#5.使用curl命令测试
[root@Server-1  ~]#  curl 192.168.2.4
Eth1
[root@Server-1  ~]#  curl 10.1.1.1
Eth0
2.配置单网卡多IP的方式
#添加一个IP
[root@Server-1 /]# ip addr add 10.1.1.1/24 dev eth0

#测试是否成功
[root@Server-1 /]# ping 10.1.1.1
PING 10.1.1.1 (10.1.1.156(84) bytes of data.
64 bytes from 10.1.1.1: icmp_seq=1 ttl=64 time=0.548 ms
64 bytes from 10.1.1.1: icmp_seq=2 ttl=64 time=0.036 ms
64 bytes from 10.1.1.1: icmp_seq=3 ttl=64 time=0.100 ms
^C
--- 10.1.1.1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2004ms
rtt min/avg/max/mdev = 0.036/0.228/0.548/0.227 ms
[root@Server-1 /]# 

#虚拟主机配置方案(也可以把server写在一个一个配置文件内)
[root@Server-1 ~]# cat /etc/nginx/conf.d/ddr1.conf 
server {
    ...
 listen 192.168.2.4:80;
 ...
}

[root@Server-1 ~]# cat /etc/nginx/conf.d/ddr2.conf 
server {
 ...
 listen 10.1.1.1:80;
 ...
}

方式二、基于端口的配置方式

[root@Server-1 conf.d]# vim port.conf
server {
        listen 81;
        
        location / { 
                root /code_81;
                index index.html;
        }
}
server {
        listen 82;
        
        location / { 
                root /code_82;
                index index.html;
        }
}  

2.根据配置文件创建所需的目录
[root@Server-1 conf.d]# mkdir /code_8{1..2}
[root@Server-1 conf.d]# echo "81" > /code_81/index.html
[root@Server-1 conf.d]# echo "82" > /code_82/index.html

3.检查语法并重启服务
[root@Server-1 conf.d]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@Server-1 conf.d]# systemctl restart nginx

4.如何去访问
 http://192.168.2.4:82/

方式三、基于多个hosts名称方式(多域名方式)

1.准备多虚拟主机配置文件
[root@Server-1 conf.d]#  cat test1.zxc.com.conf 
server {
 listen 80;
 server_name test1.zxc.com;

 location / {
  root /code/test1;
  index index.html;
 }
}

[root@Server-1 conf.d]#  cat test2.zxc.com.conf 
server {
 listen 80;
 server_name test2.zxc.com;

 location / {
  root /code/test2;
  index index.html;
 }
}

2.根据配置文件创建对应的目录
[root@Server-1 conf.d]#  mkdir /code/test{1..2} -p
[root@Server-1 conf.d]#  echo "test1_server" > /code/test1/index.html
[root@Server-1 conf.d]#  echo "test2_server" > /code/test2/index.html
[root@Server-1 conf.d]#  nginx -t
[root@Server-1 conf.d]#  systemctl restart nginx

3.配置域名解析
192.168.2.4      test1.zxc.com
192.168.2.4      test2.zxc.com

4.通过浏览器访问该网站

    问题:假如第三步域名解析写成 (192.168.2.4      test3.zxc.com),通过浏览器访问test3.zxc.com会出现什么情况?
    答:通过test3.zxc.com  对应的IP:192.168.2.4这台服务器上,发现没有test3.zxc.com 这个域名,就会访问/etc/nginx/conf.d/中最靠前的 .conf配置文件。

四、Nginx-日志管理

1.nginx语法问题

修改完nginx配置文件,一定要自查
1.修改完配置记得使用 nginx -t 检查语法
2.如果没有检查语法,直接重载导致报错。
`systemctl status nginx -l 查看错误信息`

2.nginx日志

Nginx有非常灵活的日志记录模式,每个级别的配置可以有各自独立的访问日志。日志格式通过log_format命令来定义格式。

(1)log_format定义日志格式语法
    #配置语法:包括  error.log、access.log
    Syntax:log_format name [escape=default|json] string ...;
    Default:log_format combined "...";
    Context:http
(2)Nginx默认定义语法格式
    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;     #可自定义main方法

    访问日志对应以下日志
    [root@Server-1 conf.d]# tail -f /var/log/nginx/access.log
    192.168.2.1 - - [26/Apr/2022:03:48:05 +0800] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36" "-"
(3)Nginx日志格式允许包含的内置变量
    $remote_addr            #记录客户端IP地址
    $remote_user            #客户端用户名,一般为空
    $time_local             #记录通用的本地时间,访问时间
    $time_iso8601           #记录ISO8601标准格式下的本地时间
    $request                #记录请求的方法以及请求的http协议
    $status                 #记录请求状态码(用于定位错误信息)
    $body_bytes_sent        #发送给客户端的资源字节数,不包括响应头的大小
    $bytes_sent             #发送给客户端的总字节数
    $msec                   #日志写入时间。单位为秒,精度是毫秒。
    $http_referer           #记录从哪个页面访问过来的
    $http_user_agent        #记录客户端浏览器相关信息
    $http_x_forworded_for   #记录客户端IP地址
    $request_length         #请求的长度(包括请求行,请求头和请求正文)。
    $request_time           #请求花费的时间,单位为秒,精度毫秒。
    #注:如果Nginx位于负载均衡器,nginx反向代理之后,web服务器无法直接获取到客户端真实的IP地址。
    # $remote_addr获取的是反向代理的IP地址。反向代理服务器在转发请求的http头信息中
    #增加x_forworded_for信息,用来记录客户端IP地址和客户端请求的服务器地址。
######  (4)access_log日志配置语法
    Syntax:access.log path [format [buffer=size] [gzip[=level]] [flush=time] [if=condition]];
    access.log off;
    Default:access.log logs/access.log combined;
    Context:http,server,location,if in location,limit_except
######  (5)Nginx  Access日志配置实践
```javascript
#每个server,最好单独都加上access_log
server {
    listen 80;
    server_name code.oldboy.com;
    
    #将当前的server网站的访问日志记录至对应的目录,使用main格式
    access_log /var/log/nginx/code.oldboy.com.log main;
    location / {
        root /code;
    }
 
    #当有人请求改favicon.ico时,不记录日志
    location /favicon.ico {
        access_log off;
        return 200;
    }
}
#注:如果在http层配置了access_log,server层没有配置,server日志都在http层配置的access_log中;
    如果在http层配置了access_log,server层也配置了,server日志都在server层配置的access_log中;
    如果在http层配置了access_log,server层部分配置了,server层配置了就在server层中,反之在http层;
(6)Nginx  error日志
   /var/log/nginx/error.log
可使用tail -f /var/log/nginx/error.log查看
(7)Nginx日志切割logrotate
[root@Server-1 conf.d]# cat /etc/logrotate.d/nginx
/var/log/nginx/*.log {
     daily            #每天切割日志
     missingok      #日志丢失忽略
     rotate 52      #日志保留52天
     compress      #日志文件压缩
     delaycompress   #延迟压缩文件
     notifempty    #不切割空文件
     create 640 nginx adm #日志文件权限
     sharedscripts
     postrotate    #切割日志执行的命令
             if [ -f /var/run/nginx.pid ]; then
                     kill -USR1 `cat /var/run/nginx.pid`
             fi
     endscript
}
#注:日志默认就会切割   查看 ll /var/log/nginx/
#注:yum安装默认就有,源码安装要自己写脚本


原文始发于微信公众号(运维库):02-Nginx基础配置+日志

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/64334.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!