一、Nginx简介与安装
我们下载的nginx-1.16.0.tar.gz不是二进制文件,而是C++源码文件
./configure命令:就是帮我们准备编译环境
make命令:帮我们进行编译构造,即生成二进制可执行文件
make install:进行编译构建
三个命令执行完成之后,默认就会nignx运行文件就会被安装在/usr/local/nginx下。
下面是一些步骤的截图:
没执行./configure时,目录下的文件:


进入objs文件夹

接着执行make命令,执行完以后发现objs文件夹下多了nginx可执行文件,也就是打包出来的二进制文件

但此时nginx还没有被安装到我们的/usr/local/nginx目录,所以接着执行make install命令


给nignx增加新模块新功能:
1、重新准备编译环境,带上相应的参数(如果增加新功能,切记不要覆盖原有功能,即加上原参数,./nginx -V可以查看编译时的参数) ./configure --with-http_stub_status_module --with-http_ssl_module --with-pcre
2、make编译生成二进制文件 但不要make install 因为make install可能给你把以前文件直接进行了替换,有可能以前的文件直接消失了
3、备份原有的nignx,防止出问题回滚
4、停止nignx ./nginx -s stop
5、将objs文件夹新生成的nignx替换到对应的目录去
nginx基本命令
/usr/local/nignx/sbin目录
./nginx -c 配置文件 启动nginx
./nginx -s stop 粗暴停止 直接杀死进程
./nginx -s quit 优雅停止 如果有请求进来 他就会把请求处理完再停止(nignx会把端口关掉,新的请求进不来的,把旧的请求处理掉)
./nginx -s reload 热部署 不用重启即可生效配置文件里的更新的配置,但是不是所有配置都可以,一般http{}里的才行
./nginx -s reopen 日志重新打开输入到文件
./nginx -t 检查配置文件语法
二、Nginx架构
nginx有两种进程,一种是master进程,一种是worker进程。我们的请求只会发给worker进程,而不会发送给master进程。那么master进程做什么呢?master进程用来监测worker进程状态,看它有没有挂掉;监测后端服务的健康状况等其他的健康状况(如果让worker进程每次来监测就太耗费性能了);还有一些reload reopen等命令 也是master进程来处理
apache服务器是有多少个请求,就会有多少个worker进程;但是nginx默认只有一个进程,每个进程下只有一个线程!worker数可以自己设置,一般有多少个核心,就分配多少个worker进程。 nignx是异步非阻塞模型,epoll模式,所以很快。
三、nginx语法与一些基本功能
./nginx -t 检查配置文件语法
root和alias区别

防盗链(当页面放到web服务器里的时候,比如index.html引用了一个图片src="http://182.92.70.95/2.png"就会被限制了,除非你服务器的域名符合要求)

nginx还有下载限速和IP黑名单功能


下面是nginx配置文件语法示例:
# 配置nginx的worker进程数
worker_processes 1;# 属性
# 用大括号包裹起来的,我们叫做配置块
# 事件模块配置
events {
# 每个worker进程的最大的并发连接数
worker_connections 1024;# 属性名称 属性值
}
# http 服务根路径
http {
include mime.types; # 将conf/mime.types文件引入进来 文本引入
default_type application/octet-stream;# 默认类别
sendfile on;# 可不可以发送文件
keepalive_timeout 65;# 长连接的超时时间
# 属性会被下面的server块继承
# 服务模块 可以有多个 但是server_name和listen合在一起不能同时都一样
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
server {
listen 80; #或者再其中的一个serer里的listen后加上default就是默认server 比如 listen 80 default;
server_name www.nan.com www.nannan.com *.nan.com www.nan.*; # 可以写多个 通过空格分开 也可以写通配符 优先级是 全路径匹配 >左边* > 右边* 如果都在一边 哪个在前面哪个优先级高
# 如果输入IP的时候 ,或者输入正确的ip对应的host但是却没有对应的server_name时,会走默认的server块,那么哪个在前面 哪个就是默认server
# 路径
location / {
root html; # 当前站点的根目录 其实是nginx文件夹下的html文件夹
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
server {
listen 80;
server_name www.nan.com;
location ~* \.(jpg|css|js)$ { # 正则表示式不是目录路径 location这里如果不能固定路径,可以通过正则表达式的方式来实现:~ 代表匹配正则表达式 * 代表不区分大小写 \.是特殊符号需要用反斜杠转义 $ 结束符号
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}