目录

一键编译安装nginx脚本

如何卸载编译安装的nginx?

nginx的升级问题

nginx常用命令

关闭nginx:

重新加载配置文件:

nginx的master和worker的关系:

查看nginx的版本:

检查nginx.conf配置文件是否有误: 

nginx的日志

nginx的配置文件

全局配置

http协议相关配置 

虚拟主机的配置-server 

虚拟主机实验

修改配置文件

在/usr/local/sumeng66/html下新建3个目录,存放3个虚拟主机的index.html页面

重新加载nginx的配置

在Windows里修改hosts文件,进行域名解析

使用浏览器输入不同的域名测试访问


回顾昨天的学习,思考yum安装的nginx和编译安装的nginx是否会发生冲突?能否在机器里编译安装多个nginx?

只要不启动,代码在磁盘里面其实没有什么影响,不会发生冲突;如果启动了,如果没有占用相同的端口也不会发生冲突。冲突的点就是默认想抢占80端口号

也可以在机器里编译安装多个nginx,只要不使用相同的端口,就不会冲突

一个nginx进程对应一个网站,一个网站占用不同的端口

nginx日志按照日期格式保存_nginx日志按照日期格式保存

一键编译安装nginx脚本

[root@router nginx]# cat onekey_install_nginx.sh 
#!/bin/bash

#新建一个文件夹用来存放下载的nginx源码包
mkdir -p /sumeng_nginx
cd /sumeng_nginx

#新建用户
useradd -s /sbin/nologin sumeng

#下载nginx
curl -O https://nginx.org/download/nginx-1.24.0.tar.gz

#解压nginx源码包
tar xf nginx-1.24.0.tar.gz
#进入解压后的文件夹
cd nginx-1.24.0

#解决依赖关系
yum install epel-release -y
yum install gcc openssl openssl-devel pcre pcre-devel automake make -y

#编译前的配置
./configure --prefix=/usr/local/sumeng66 --user=sumeng --with-http_ssl_module --with-stream --with-http_v2_module --with-threads --with-http_stub_status_module

#编译,开启2个进程同时编译,速度会快些
make -j 2

#将编译好的二进制文件复制到指定的安装路径目录下
make install

#启动nginx--使用绝对路径
/usr/local/sumeng66/sbin/nginx
#修改path变量
PATH=$PATH:/usr/local/sumeng66/sbin
#永久修改
echo "PATH=$PATH:/usr/local/sumeng66/sbin" >>/root/.bashrc

#设置nginx的开机启动
echo "/usr/local/sumeng66/sbin/nginx" >>/etc/rc.local
chmod +x /etc/rc.d/rc.local

#关闭防火墙
service firewalld stop
systemctl disable firewalld

#临时关闭selinux
setenforce 0
#永久关闭selinux
sed -i '/^SELINUX=/ s/enforcing/disabled/' /etc/selinux/config

如何卸载编译安装的nginx?

直接删除--prefix指定的安装目录,并且在PATH环境变量中删除nginx的安装路径

nginx的升级问题

1.重新编译安装一个新的,会产生短时间的中断

2.采用热升级方式:在不影响客户端请求(服务不中断)的情况下使用新的nginx二级制文件替换老的nginx二进制文件,再停掉老的进程。实现在老的nginx主进程不退出的情况下以子进程的方式启动新的master进程和新的worker进程,让新的master进程重新监听端口和接收请求,新的master进程稳定之后,通过发送信号通知老master进程退出。

nginx常用命令

关闭nginx:

nginx -s stop:快速的停止nginx,立马断开连接

nginx -s quit:等待nginx进程处理任务完毕再停止

重新加载配置文件:

nginx -s reload:当nginx配置文件中做了修改时,master进程会重新加载configuration,来使修改生效,无需重启整个nginx服务,不用停止业务。如果配置文件出现问题,reload不会成功,会继续使用老的配置。

nginx的master和worker的关系:

master管理worker进程,当worker进程死掉会重启一个,master是worker的父进程

当master进程被杀死,worker进程还在就仍然能够提供服务,此时worker进程为孤儿进程,被systemd进程收养,但是当修改了配置文件,要reload nginx时就会出现问题,因为reload是给master进程发送信号的

注意:在指定配置时,--user=name指定的用户启动的是worker进程

查看nginx的版本:

[root@router logs]# nginx -v
nginx version: nginx/1.24.0

检查nginx.conf配置文件是否有误: 

[root@router conf]# nginx -t
nginx: the configuration file /usr/local/sumeng66/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/sumeng66/conf/nginx.conf test is successful
[root@router conf]# vim nginx.conf     #故意将配置文件改错
[root@router conf]# nginx -t
nginx: [emerg] unknown directive "sumeng" in /usr/local/sumeng66/conf/nginx.conf:3
nginx: configuration file /usr/local/sumeng66/conf/nginx.conf test failed

nginx的日志

[root@router sumeng66]# cd logs/
[root@router logs]# ls
access.log  error.log  nginx.pid

access.log:记录正常访问网站的日志

error.log:记录访问出错的日志

日志的好处:1.排除故障;2.进行数据分析

日志的等级 -- 从上到下严重级别从小到大

none:不记录日志

debug:调试信息,不属于错误日志

info:一般的通知信息

notice:提醒信息,不理会可能会出错

warning:警告信息,程序可能已经出现了问题,但是不影响程序的正常运行

error:错误信息,服务出现了问题,无法正常启动

critical:比较严重的错误信息,服务可能无法修复了

alert:警报信息,不仅服务宕掉了,还会影响系统的正常运行

emerg:紧急信息,系统可能已经无法使用了

nginx的配置文件

/usr/local/sumeng66/conf/nginx.conf是nginx的主配置文件,配置文件中的每一条配置就是一条指令。分块来详细讲述一下nginx的主配置文件

全局配置

#user  nobody;     #指定启动nginx worker进程用nobody用户去启动
worker_processes  1;     #指定启动1个worker进程,一般与CPU核心数量一致

#error_log  logs/error.log;     #指定错误日志存放的文件夹
#error_log  logs/error.log  notice;     #记录notice级别以上的日志
#error_log  logs/error.log  info;     #记录info级别以上的日志

#pid        logs/nginx.pid;     #指定记录master进程pid号的文件

events {     #事件:理解为一个用户访问过来就是一个事件
    worker_connections  1024;      #1个worker进程允许1024个用户访问,即1个worker里产生1024个线程
    #一个用户访问过来,就启动一个线程来接待吗,从web服务器里读取数据给用户
}

http协议相关配置 

http {     #http协议相关的配置
    include       mime.types;
    default_type  application/octet-stream;
    
    #定义访问日志的格式,main是定义的格式名字
    #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;     #连接的超时时间,65s后用户和web服务器建立的连接就会断开

    #gzip  on;     #开启压缩,默认是不开启的

访问日志格式:

$remote_addr:远程服务器的ip,本质上是nginx内部调用某个某个变量的值

$remote_user:远程登录用户

$time_local:本地时间

$request:请求的网址

$status:响应的状态码,200表示成功,404表示网页未找到

$body_bytes_sent:发送的数据

$http_referer:参考的网站--从哪个网站引流(跳转)过来的
$http_user_agent:用户使用的浏览器--用户的代理

$http_x_forwarded_for:获取用户的真实ip

虚拟主机的配置-server 

虚拟主机有三种类型:

基于域名:一个域名对应一个server,推荐使用

基于ip的虚拟主机:一个网站对应一个公网ip

基于端口的虚拟主机:一个网站对应一个端口

server {     #提供web网站服务,一个server对应一个网站
        listen       80;     #监听80端口
        server_name  localhost;     #为哪个域名提供服务

        #charset koi8-r;

        #access_log  logs/host.access.log  main;     #访问日志的路径和格式

        location / {     #定义的路由
            root   html;     #网站的根目录在html文件夹,在nginx安装目录下
            index  index.html index.htm;     #定义访问的时候,第1个被访问的页面,最左边的优先级最高
        }

        #error_page  404              /404.html;     #定义出现404错误的时候,去访问404.html网页

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;     #出现nginx内部错误,返回/50x.html页面
        location = /50x.html {      #直接访问/50x.html路由
            root   html;
        }
}

虚拟主机实验

只安装一个nginx,开启3个server(虚拟主机),对应3个域名,一个域名就是一个网站 

修改配置文件
[root@router conf]# cat nginx.conf|egrep -v "^$|#"
worker_processes  1;
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"';
    sendfile        on;
    keepalive_timeout  65;
    server {
        listen       80;
        server_name  www.su1.com;
        access_log  logs/su1.com.access.log  main;
        location / {
            root   html/su1;
            index  index.html index.htm;
        }
        error_page  404              /404.html;
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
    server {
        listen       80;
        server_name  www.su2.com;
        access_log  logs/su2.com.access.log  main;
	location / {
            root   html/su2;
            index  index.html index.htm;
        }
        error_page  404              /404.html;
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
    server {
        listen       80;
        server_name  www.su3.com;
        access_log  logs/su3.com.access.log  main;
        location / {
            root   html/su3;
            index  index.html index.htm;
        }
        error_page  404              /404.html;
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}
在/usr/local/sumeng66/html下新建3个目录,存放3个虚拟主机的index.html页面

nginx日志按照日期格式保存_笔记_02

重新加载nginx的配置
[root@router ~]# nginx -s reload
[root@router ~]# nginx -t
nginx: the configuration file /usr/local/sumeng66/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/sumeng66/conf/nginx.conf test is successful
在Windows里修改hosts文件,进行域名解析

hosts文件在Windows里的存放路径:C:\Windows\System32\drivers\etc

小技巧:由于hosts文件不能直接进行修改,所以先将该文件复制一份放在其他文件夹下,修改好后再将原本的hosts文件进行替换

nginx日志按照日期格式保存_笔记_03

调出cmd行工具测试域名是否生效:

nginx日志按照日期格式保存_nginx日志按照日期格式保存_04

使用浏览器输入不同的域名测试访问

nginx日志按照日期格式保存_学习_05

nginx日志按照日期格式保存_nginx日志按照日期格式保存_06

nginx日志按照日期格式保存_nginx_07