一、Nginx 环境准备
1.关闭防火墙
安全增强型 Linux(Security-Enhanced Linux)简称 selinux,它是一个 Linux 内核模块,也是 Linux 的一个安全子系统。
getenforce 查看selinux的状态
setenforce 0 设置selinux的关闭状态
systemctl status firewalld 查看防火墙状态
systemctl stop firewalld 关闭防火墙
systemctl disable firewalld 禁止开机自启
systemctl start firewalld 开启防火墙
![](https://gitee.com/asd12444yyy/study-images/raw/master/img/image-20210528104115269.png)
2.安装Nginx
方案一:Nginx的源码简单安装
需要先准备GCC编译器,PCRE兼容正则表达式库,zlib压缩库,OpenSSL安全通信软件库包。
(1)进入官网查找所需下载版本的链接地址,然后使用wget命令进行下载
wget 网址
(2) 将下载的资源进行包管理
mkdir -p nginx/core
mv 文件名 nginx/core
(3) 解压缩
tar -xzf 文件名
(4)进入压缩文件中,发现configure
./configure
(5)编译和安装
make
make insatll
注意:默认状态下,nginx被安装到/usr/local/nginx 路径下了,如果要自己设置安装路径,在./configure后加参数
方案二:通过yum安装nginx
如果直接用yum -y install nginx
安装,会显示没有此安装包,可按照下面方法解决
1.远程下载安装nginx的yum仓库文件
#执行下面两行代码进行安装
rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
yum -y install nginx
也可以通过官网http://nginx.org/en/docs/install.html详细说明了linux如何安装nginx
安装好nginx后,如何查找安装目录?
通过whereis nginx
查找nginx所在目录
然后进入到此目录,并执行./nginx 启动nginx,在浏览器输入本机地址或者localhost,会显示welcome nginx
方案三:安装epel-release软件包
很多软件包在yum里面没有的,解决的方法,就是使用epel源,也就是安装epel-release软件包。(这种方法需要挺大空间的,空间不够的话,不建议该方法)
sudo yum install epel-release
yum update
yum -y install nginx
二、Nginx目录结构分析
1)nginx相关目录
工作目录: /etc/nginx
执行文件:/usr/sbin/nginx
日志目录:/var/log/nginx
启动文件:/etc/init.d/nginx
web目录:/var/www/html/ 首页文件是index.nginx-debian.html
三、Nginx服务器启停命令
1.Nginx服务的信号控制
Nginx中的master和worker进程是什么?
Master进程:master作为主进程仅有一个,用来管理worker进程。
Worker进程:worker进程有多个,它负责处理用户请求,各个worker进程之间是平等的并且相互度李,处理请求的机会也是一样的。
如何获取进程的PID?
通过 ps -ef |grep nginx
命令
![image-20210604195503450](https://gitee.com/asd12444yyy/study-images/raw/master/img/image-20210604195503450.png)
信号有哪些?
信号 | 作用 |
---|---|
TERM/INT | 关闭整个服务,会将nginx服务立即关闭 |
QUIT | 平缓停止当前Nginx服务进程 |
HUP | 使用新的配置文件启动进程,之后平缓停止原有进程(平滑重启) |
USR1 | 重新打开日志文件,通常应用于日志切割 |
USR2 | 平滑升级到最新版的nginx |
WINCH | 所有子进程不在接收处理新连接,相当于给work进程发送QUIT指令 |
使用方法: kill -signal PID |
2.Nginx的命令行控制
在/usr/sbin目录下执行 ./nginx
启动nginx
./nginx -h 列出当前nginx支持参数和配置,如下图
![image-20210604202037108](https://gitee.com/asd12444yyy/study-images/raw/master/img/image-20210604202037108.png)
-v nginx版本信息
-V nginx除了nginx版本信息外,还有其他内容
-t 默认找到nginx安装目录,检测nginx.conf配置文件是否有语法错误。
-T 在检测nginx.conf配置文件时,如果成功除了输出-t下相同信息外,还会输出nginx.conf详细信息
检测失败时,输出的信息和-t下完全相同。
-q ./nginx -tq
在测试期间只输出错误信息,测试成功什么都不输出。
-s signal 信号:
stop 快速关闭,类似于TERM/INT
quit 类似于QUIT
reopen 类似于USR1
reload 类似于HUP
如 ./nginx -s stop 关闭nginx
-p 设置nginx安装目录
-c 指定nginx的配置文件路径
-g 用来补充nginx配置文件,向nginx服务指定启东市应用全局的配置
四、Nginx核心配置文件 nginx.conf
nginx.conf配置文件中有三大块:全局块,events块,http块
http中可以配置多个server块,每个server块又可以配置多个location块。
nginx.conf在/etc/nginx目录下
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log notice;
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;
}
在http配置中有一句 include /etc/nginx/conf.d/*.conf; ,也就是它还包含conf.d下的所有后缀名为.conf文件。在此处,本机该目录下有一个default.conf文件,文件内容如下:
server {
listen 80;
server_name localhost;
#access_log /var/log/nginx/host.access.log main;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
}
全局块:
usr指令
(1)usr:用于配置运行Nginx服务器的worker进程的用户和用户组
作用:指定启动运行工作进程的用户及用户组,对系统权限访问控制更加精细,安全。
实验:
修改nginx.conf文件,设置一个用户信息"www"
user www;
设置完后,进行检测,发现错误,这是因为当前系统中没有www用户,需要添加www用户
添加用户
useradd www
然后重启nginx以及查看nginx进程,发现现在worker进程属于www用户下面了。
![image-20210604212026556](https://gitee.com/asd12444yyy/study-images/raw/master/img/image-20210604212026556.png)
www和nginx,nobody用户区别:
现在我在root/html/目录下创建一个index.html文件,当访问localhost的时候希望访问的是该目录下的index.html
思路应该是想到更改default.conf下的loacation 中的root路径,如图
然而访问发现报错,
这是因为使用www用户启动的nginx想要访问root组的目录是没有权限的。通过权限访问控制可以提高系统的安全性。
woker process指令
master_process:用来指定是否开启工作进程,
worker_processs:配置Nginx生成工作进程的数量, 理论上来说,worker process的值越大,处理的并发量越高。但建议该值与系统cpu的个数保持一致。配置使用这个时,master_process应该设为off
include指令
用来引入其他配置文件,使nginxde 配置更加灵活
include 可以在nginx.conf文件中任何位置进行配置
events块
accept_mutex:用来设置网络序列化
accept_mutex on|off;
因为nginx是以多进程来工作,当有用户请求是,多个worker进程会被同时唤醒,而最终只有一个进程获得连接,这样的方式会影响nginx的整体性能。
将accept_mutex设置为on状态,能够将多个nginx进程接收连接进行序列号,一个个来唤醒接收,就防止了多个进程对连接的争抢。
multi_accept:用来设置是否允许同时接收多个网络连接
multi_accept on|off;
如果在off状态,nginx一个工作进程只能接收一个新的连接。on状态,一个工作进程可以同时接收所有的新的连接。
worker connections:用来配置单个worker进程最大的连接数
worker connections number;
number的值不能大于操作系统支持打开的最大文件句柄数量。
use:用来设置Nginx服务器选择哪种时间驱动来处理网络信息
use method(select/poll/epoll/kqueue等)
http块
定义MIME-Type
MIME Type 是网络资源的媒体类型。Nginx作为web服务器,也需要能够识别前端请求的资源类型。
Nginx配置文件中,默认有两行
include mime.types;
default_type application/octet-stream;
任务:实现请求某些接口的时候返回指定的文本字符串或者json字符串
实现方法:修改nginx.conf文件
![image-20210605172115428](https://gitee.com/asd12444yyy/study-images/raw/master/img/image-20210605172115428.png)
修改完后,重新运行nginx, 分别打开 localhost/get_text, localhost/get_json网址,显示如下信息
![image-20210605172429962](https://gitee.com/asd12444yyy/study-images/raw/master/img/image-20210605172429962.png)
![image-20210605172529947](https://gitee.com/asd12444yyy/study-images/raw/master/img/image-20210605172529947.png)
server块和location块
server {
listen 80; #默认监听窗口
server_name localhost; #域名
#access_log /var/log/nginx/host.access.log main;
location / {
root /usr/share/nginx/html; #资源所对应的目录,index.html..要放在此目录下
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html; #发生指定状态码时跳转到50x.html
location = /50x.html {
root /usr/share/nginx/html;
}
}
有些指令即可以配置到http,也可以配置在server和location中
如果同时三个块里面都配置了,优先级从高到底:location>server>http 就近原则