Nginx搭建

114 阅读5分钟

Nginx

什么是Nginx

Nginx是十分轻量级的HTTP服务器*。Nginx,它的发音为“engine X”,是一个高性能的HTTP和反向代理服务器*,同时也是一个IMAP/POP3/SMTP 代理服务器。

Nginx特点

  • 稳定性高
  • 系统资源消耗低
  • 对http并发连接的处理能力高(对单台物理服务器可以支持30000~50000个并发请求)

Nginx与Apache的区别

NginxApache
基于时间的web服务器基于流程的服务器
所有请求由一个线程处理单个线程处理单个请求
避免子进程的概念基于子进程
内存消耗和可伸缩性不依赖于硬件依赖于CPU核内存等硬件
支持热部署不支持热部署
对于静态文件处理具有更高效率相对一般
在反向代理场景具有明显优势相对一般

Nginx应用场景

  • 静态服务器(图片、视频服务、文本)
  • 动态服务
  • 反向代理,负载均衡
  • 缓存服务

七层转发和四层转发的区别

  1. 七层用http,URL进行转发到网页传输(用应用)

    通过外部去访问,通过浏览器

  2. 四层在系统内部进行转发数据(用内核转发)

    直接内部就可以通信

  • http、HTTPS、Nginx、Apache都是七层代理(应用层)
  • Nginx在1.18版本上支持四层代理(传输层)

Nginx编译安装

环境

一台虚拟机

实验

关闭防火墙,上传软件包

systemctl stop firewalld
systemctl disable firewalld
setenforce 0
nginx-1.12.0.tar.gz   #安装包版本

image.png

安装依赖包

yum -y install \   #安装
pcre-devel \   #perl的接口开发包
zlib-devel \   #提供相应的库和头文件
gcc \   #c语言编译器 
gcc-c++ \    #c++编译器
make   #编译

image.png

创建运行的用户

Nginx 服务程序默认以 nobody 身份运行,建议为其创建专门的用户账号,以便更准确地控制其访问权限(如果不创建,在生产环境中是非法的)

useradd -M -s /sbin/nologin nginx
#创建一个nginx用户,不允许登录系统
-M   #不生成家目录
-s   #指定shell环境

image.png

编译安装nginx

tar zxvf nginx-1.12.0.tar.gz -C /opt/
#解压nginx压缩包到opt目录
-C   #指定解压存放目录
cd /opt/nginx-1.12.0/
#进入nginx目录
./configure \
#运行
--prefix=/usr/local/nginx \		       #指定nginx的安装路径
--user=nginx \			               #指定用户名
--group=nginx \				       #指定组名
--with-http_stub_status_module		       #启用 http_stub_status_module 模块以支持状态统计
操作
make && make install
#编译及安装
ln -s /usr/local/nginx/sbin/nginx/usr/local/sbin/	
#让系统识别nginx的操作命令
软连接:
编译安装没有任何操作,只有将Nginx放入系统目录里面,才可以识别和使用
不做软连接,只能在安装的目录使用;
做软连接,在任何目录都可以使用

image.png

image.png

image.png

检查Nginx等操作

nginx -t
#检查
nginx
#开启
killall -3 nginx
#一开始不知道Nginx的pid号,就全部停止
可以使用
cat /usr/local/nginx/logs/nginx.pid
#查看nginx的PID号

image.png

扩展kill,默认是15(重要)

kill 
#不写选项,默认是15,表示正常结束进程
kill -3 pid
#表示退出,实验完成后,退出
kill -9 pid
#表示强制杀死,不管实验做没做出来,直接杀死
信号编码信号名含义
0EXIT程序退出时收到该信息
1HUP挂掉电话线或终端连接的挂起信号,这个信号也会造成某些进程在没有终止的情况下重新初始化。
2INT表示结束进程,但并不是强制性的,常用的 "Ctrl+C" 组合键发出就是一个 kill -2 的信号。
3QUIT退出。
9KILL杀死进程,即强制结束进程。
11SEGV段错误。
15TERM正常结束进程,是 kill 命令的默认信号

升级Nginx版本

下载安装包,编译安装

tar zvxf nginx-1.22.0.tar.gz -C /opt
#将升级的版本包解压到opt目录下
cd /opt/nginx-1.12.2 
#进入Nginx升级的目录
./configure \
--prefix=/usr/local/nginx \		
--user=nginx \					
--group=nginx \					
--with-http_stub_status_module \
--with-http_ssl_module

image.png

image.png

报错

在升级时,直接运行下面命令,可能会出错
./configure \
--prefix=/usr/local/nginx \		
--user=nginx \					
--group=nginx \					
--with-http_stub_status_module \
--with-http_ssl_module

image.png

错误信息为:
没有ssl这个环境,就需要安装一下环境
yum -y install openssl openssl-devel
安装Openssl等
安装之后在执行一下,就会成功

编译、备份

make
#编译
mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx_old
#将旧版本的程序,改名字,让系统识别不了
cd objs
#切换进入objs目录,里面有新版本的程序
cp nginx /usr/local/nginx/sbin
#将新版的程序,拷贝到存放主程序的目录里,让他生效

image.png

image.png

重启服务,查看版本

nginx
#直接打Nginx局可以重启服务
nginx -V
#查看版本

image.png

添加Nginx系统服务

方法一

脚本
vim /etc/init.d/nginx
#!/bin/bash
#chkconfig: 35 99 20    // 这是固定格式,2345表示运行级别,之后为开机执行顺序和关机执行顺序
#description:Nginx Service Control Script    //这也是必须的 
COM="/usr/local/nginx/sbin/nginx" 
PID="/usr/local/nginx/logs/nginx.pid"
case "$1" in
start)
  $COM
;;

stop)
  kill -s QUIT $(cat $PID)
;;

restart)
  $0 stop
  $0 start
;;

reload)
  kill -s HUP $(cat $PID)
;;

*)
echo "Usage: $0 {start|stop|restart|reload}"
exit 1

esac
exit 0

chmod +x /etc/init.d/nginx
chkconfig --add nginx			#添加为系统服务
systemctl stop nginx   
systemctl start nginx

service   nginx   start|stop|restart|reload
系统服务 服务名称 启动模式

方法二

在生产中,先复制一份模板到
cd /lib/systemd/system/
#进入系统目录
cp sshd.service /lib/systemd/system/nginx.service
#复制模板文件(复制的模板文件,要是某程序的.service)
vim /lib/systemd/system/nginx.service
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
将Nginx加入system服务控制里面,这样就可以使用systemctl去控制它
-------------------------------------------------------------------
说明
[Unit]:服务的说明
Description:描述服务
After:依赖,当依赖的服务启动之后再启动自定义的服务

[Service]服务运行参数的设置
Type=forking是后台运行的形式,使用此启动类型应同时指定
PIDFile以便systemd能够跟踪服务的主进程。
ExecStart为服务的具体运行命令
ExecReload为重启命令
ExecStop为停止命令
PrivateTmp=True表示给服务分配独立的临时空间
注意:启动、重启、停止命令全部要求使用绝对路径

[Install]服务安装的相关设置,可设置为多用户

chmod 754 /lib/systemd/system/nginx.service
#给权限
systemctl start nginx.service
#开启nginx服务
systemctl enable nginx.service
#设置开机自启

image.png

image.png

image.png

报错

在配置nginx配置服务时候(不是脚本的情况下)
配置完成后
在开启nginx服务时候,可能会出现报错
报错信息是,80端口被占用
这个时候关闭一下nginx服务
killall -3 nginx
在去使用systemctl命令开启服务,这样就会开启成功

image.png

image.png

image.png