初识nginx

315 阅读4分钟

一、Nginx简介与安装

我们下载的nginx-1.16.0.tar.gz不是二进制文件,而是C++源码文件

./configure命令:就是帮我们准备编译环境

make命令:帮我们进行编译构造,即生成二进制可执行文件

make install:进行编译构建

三个命令执行完成之后,默认就会nignx运行文件就会被安装在/usr/local/nginx下。

下面是一些步骤的截图:

没执行./configure时,目录下的文件:

执行完./configure后,目录下的文件:

可以看出,执行完./configure命令后,目录下多了一个Makefile文件objs文件夹

进入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区别

通过这种location /wj 的方式配置的话,如果是root 他会把/wj拼接到root后面。 如果使用alias就不会拼接了,即: alias /www/wj/;

防盗链(当页面放到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;
        }

    }
   

}