Linux笔记|Linux Nginx

1、简介 官网:http://nginx.org/

org organization 组织性的,非盈利的
com commercial 商业的
niginx是一个做网站服务器的软件,是静态的网站
website 站点、网站
HTTP 超文本传输协议,就是一个传输网页的协议,在浏览器和web服务器(nginx,tomcat等)软件之间通信的。协议理解为语言,用来交流
SA system administater 系统管理员
[root@hahah ~]# cat /etc/centos-release 查看centos版本 CentOS Linux release 8.3.2011 [root@hahah ~]# uname -r查看linux的内核版本 4.18.0-240.el8.x86_64

2、Nginx下载 curl 是linux里的字符界面的浏览器
wget是linux里的迅雷,也支持http协议,可以去网站下载软件
curl -O https://nginx.org/download/nginx-1.21.4.tar.gz # -O 下载到本地,远程叫什么名字本地就是这个名字

3、 Nginx安装 3.1 yum安装
到nginx或者centos的官网去下载的软件包安装
快捷、方便、高效
nginx..tar.gz —>制作成–》nginx..rpm结尾
3.2 编译安装
Nginx是使用c语言编写的,将源码编译成二进制程序,然后安装。
需要自己解决软件之间的依赖关系,还要执行很多的配置,难度大。
可以定制开启需要的功能,可以定制功能和指定安装路径
编译安装的参数 with 开启,说明这个东西默认是关闭的
without 禁用,说明这个东西默认是开启的

–prefix=PATH set installation prefix 指定安装路径
–without-http disable HTTP server 禁用http
–with-mail enable POP3/IMAP4/SMTP proxy module 开启
–with-http_ssl_module enable ngx_http_ssl_module 开启
–with-http_stub_status_module 状态统计功能
–with-stream 4层负载均衡功能
–with-http_realip_module 让后端的web服务器知道前面的代理的ip地址,获得真正的客户端的ip地址
–with-http_geo_module 根据客户端的ip地址进行限制的
经典三部曲
  • 配置(configure)
a) 安装依赖
yum -y install zlib zlib-devel openssl openssl-devel pcre pcre-devel gcc gcc-c++ autoconf automake make psmisc net-tools lsof vim wget -y

b) ./congfigure 生成一个makefile
./configure --prefix=/usr/local/sclilin99--user=lilin --group=lilin--with-http_ssl_module--with-threads--with-http_v2_module--with-http_stub_status_module--with-stream--with-http_gunzip_module

  • 编译(make)
    将源代码编译成二进制程序
    执行 make -j 2
  • 安装(make install)
    将二进制程序安装到指定的路径下
    执行 make install
[root@hahah sclilin99]# pwd /usr/local/sclilin99 [root@hahah sclilin99]# ll |grep -v 'temp' 总用量 0 drwxr-xr-x 2 rootroot 333 12月 23 17:13 conf #存放nginx的配置文件 drwxr-xr-x 2 rootroot40 12月 23 12:02 html #存放网站网页的目录 drwxr-xr-x 2 rootroot58 12月 23 21:27 logs #存放日志 drwxr-xr-x 2 rootroot19 12月 23 12:02 sbin #存放nginx的启动程序的

[root@hahah logs]# pwd /usr/local/sclilin99/logs [root@hahah logs]# ll 总用量 12 -rw-r--r-- 1 root root 1492 12月 23 16:31 access.log #正常的访问日志 -rw-r--r-- 1 root root822 12月 23 16:20 error.log #访问出错的日志 -rw-r--r-- 1 root root6 12月 23 15:07 nginx.pid #里面存放master进程的进程号

启动nginx
  • /etc/rc.local是软链接,连接到/etc/rc.d/rc.local
  • /etc/rc.d/rc.local里面注释到chmod +x /etc/rc.d/rc.local
  • /etc/rc.d/rc.local 用于添加开机启动命令
    (/usr/local/sclilin99/sbin/nginx)
判断是否启动 1.看端口
netstat -anplut 或 lsof -i:80 或 ss -anplut
默认web服务占用80端口
2.看进程
ps aux|grep nginx
3.直接访问
浏览器访问192.168.56.128,看是否出现index.html
4.看日志
tail -f access.log/error.log
关闭nginx
  • nginx -s stop 快速关闭
  • nginx -s quit 正常关闭(优雅的,推荐)
  • nginx -s reopen 重新生成一个新的日志文件
  • nginx -t 测试nginx.conf配置文件是否有错误
  • nginx -s reload 重新加载配置文件
    修改配置文件/usr/local/sclilin99/conf/nginx.conf
    worker_processes 4;
    再执行reload命令,相当于刷新服务,启用新的配置。
    master进程不产生新的进程,worker进程会产生新的进程。
    好处是不会中断业务
nginx.conf 是nginx的主配置文件
nginx.conf的作用:其实就是给nginx进程传递参数的,告诉nginx如何安装人的要求去运行
卸载编译安装 删除安装指定的目录
–prefix指定的路径
4、signal信号 常用命令
kill -9 强制杀死进程,不能被屏蔽的一种信号类型,
kill -3 (quit) master进程结束,子进程worker 也结束
kill -15 (term) 自我终结
信号详解
1) SIGHUP
通常是在终端的控制进程结束时, 通知同一session内的各个作业停止运行。 登录Linux时,系统会分配给登录用户一个终端(Session)。在这个终端运行的所有程序,包括前台进程组和后台进程组,一般都 属于这个 Session。 当用户退出Linux登录时,前台进程组和后台有对终端输出的进程将会收到SIGHUP信号。这个信号的默认操作为终止进程,因此前台进程组和后台有终端输出的进程就会中止。 nohup可以用来屏蔽hup信号(nohupbash while.sh&)

2) SIGINT
程序终止(interrupt)信号, 在用户键入INTR字符(通常是Ctrl-C)时发出,用于通知前台进程组终止进程。

3) SIGQUIT
其实可以理解为中断程序的正常运行,同时也会给子进程也终止

9) SIGKILL
用来立即结束程序的运行. 本信号不能被阻塞、处理和忽略。 告诉linux 内核去强制杀死进程--》理解为内核派出锦衣卫去杀死某个人 trap 屏幕各种信号,唯独9这种信号不能被屏蔽

15) SIGTERM
程序结束(terminate)信号, 与SIGKILL不同的是该信号可以被阻塞和处理。通常用来要求程序自己正常退出,shell命令kill缺省产生这个信号。

关闭会话是会终止正在执行的脚本,怎么办?
  • nohup 可以用来屏蔽hup信号。在执行脚本命令的前面加上nohup。
  • trap屏蔽各种型号,唯独不能屏蔽-9的信号
    trap “echo I am busy” 15 3 2 1 9
[root@slave-mysql linlin99]# cat while.sh trap "echo i am busy"15 3 2 1 9 i=1 while : do echo $i ((i++)) sleep 1 done

5、防火墙
[root@slave-mysql ~]# service firewalld stop立即关闭防火墙 [root@slave-mysql ~]# service firewalld status查看防火墙服务的状态 [root@slave-mysql ~]# systemctl disablefirewalld设置firewalld 服务开机不启动,下一次开机不启动

6、编写一键部署Nginx脚本
#!/bin/bash #安装依赖 yum install epel-release -y yum -y install zlib zlib-develgeoip-devel openssl openssl-devel pcre pcre-devel gcc gcc-c++ autoconf automake make psmisc net-tools lsof vim wget -y#新建用户 id hejin || useradd hejin -s /sbin/nologin#下载nginx软件 mkdir /lianxi/12-23Nginx -p cd /lianxi/12-23Nginx # 下载 curl -O https://nginx.org/download/nginx-1.21.4.tar.gz # 解压 tar -xf nginx-1.21.4.tar.gz cd nginx-1.21.4# 编译前先配置文件 ./configure --prefix=/usr/local/source--user=hejin --group=hejin--with-http_ssl_module--with-threads--with-http_v2_module--with-http_stub_status_module--with-stream--with-http_geoip_module --with-http_gunzip_module# 判断是否配置成功 [ $? -ne 0 ] && exit# 开始编译 make -j 2# 开始安装 make install#killall nginx进程 killall -9 nginx# 立即关闭防火墙 service firewalld stop # 设置防火墙下一次开机不启动 systemctl disablefirewalld# 自定义开机启动程序 echo "/usr/local/source/sbin/nginx" >>/etc/rc.d/rc.local chmod +x /etc/rc.d/rc.local# 执行rc.local 启动nginx . /etc/rc.d/rc.local

7、nginx.conf 配置详解 nginx.conf 是nginx的主配置文件
nginx.conf的作用:其实就是给nginx进程传递参数的,告诉nginx如何安装人的要求去运行
#usernobody; #默认使用nobody用户去启动nginx worker_processes2; #工作进程的数量,建议和cpu核心一致 # 查看cpu核心cat /etc/cpuinfo 或top,按1 # CPU和内存的配比原则:一个核心配4G的内存

#error_loglogs/error.log; #error_loglogs/error.lognotice; #日志的级别 5级以上的 #error_loglogs/error.loginfo; # 日志的级别 6级以上的

日志级别 系统定义了8个消息级别, 级别号从0到7分别为:
【Linux笔记|Linux Nginx】0: 致命级(KERN_EMERG), 系统不能使用了
1: 警戒级(KERN_ALERT),
2: 临界级(KERN_CRIT),
3: 错误级(KERN_ERR), 只要是error以上及级别的都会导致程序启动或运行失败
4: 告警级(KERN_WARN),不影响程序的正常运行,只是提醒而已
5: 注意级(KERN_NOTICE),正常的记录
6: 通知级(KERN_INFO),普通的信息
7: 调试级(KERN_DEBUG),什么都记录
#pidlogs/nginx.pid; # master进程号events { #事件,用户访问nginx服务器,产生event。一个worker可以产生1024个连接。 worker_connections1024; #一个进程的并发数,即同时允许多少人同时访问nginx }

# 放http协议相关的 http { includemime.types; # 包含这种类型的文件 default_typeapplication/octet-stream; # log日志格式 main log_formatmain'$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; # 引用nginx内部的变量值,把它写入到log日志中 # 很多数据都来自于http请求响应报文里面的字段(nginx会读懂计算机网络的数据) access_loglogs/access.logmain; #访问日志,按照main格式去记录sendfileon; #tcp_nopushon; #keepalive_timeout0; keepalive_timeout65; # ESTABLISHED,65秒后连接断开 。建立连接是消耗资源的,cpu内存总量有限,所以要断开,让更多的人访问。#gzipon; #启用压缩功能 --》加快传输的速度的server {#--》提供web服务的配置 --》虚拟主机--》网站 listen80; #监听80端口 server_namelocalhost; # 网站域名,可以配置多个。#charset koi8-r; access_loglogs/host.access.logmain; #访问日志的路径和格式 location / {#提供某个路由的配置 --》/ 访问网站的根目录 roothtml; #html是存放网页的根目录 --》/usr/local/sclilin99/html indexindex.html index.htm; #指定首页 }error_page404/404.html; #错误页面,访问不到网页的时候,会给用户返回这个页面# redirect server error pages to the static page /50x.htmlerror_page500 502 503 504/50x.html; # location = /50x.html {# roothtml; }

    推荐阅读