Nginx介绍

Posted 出水芙蓉薇薇

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nginx介绍相关的知识,希望对你有一定的参考价值。

一、web服务器以及web服务软件介绍

       web服务器也是HTTP服务器,主要用于提供网上信息浏览。web网络服务是一种被动访问的服务程序,即只有接收到互联网中其他主机发出的请求后才会响应,最终用于提供服务程序的web服务器会通过HTTP(超文本传输协议)或者HTTPS(安全超文本传输协议)把请求的内容传送给用户。

1.  常用来提供静态Web服务的软件有如下三种

 Apache: 这是中小型Web服务的主流,Web服务器中的老大哥。优势在于开放源代码,开发维护团队强大、支持跨平台应用,强大的移植性等优点,但是功能以模块化定制,消耗内存较高,性能稍弱于其他轻量级web服务器。Apache使用的网络IO模型是传统的select模型,以Prefork多进程模式运转,需要经常派生子进程,消耗系统资源要比nginx高的多,且一个进程在同一时间只会处理一个请求。

 Nginx:是一款高性能的HTTP和反向代理服务器。Nginx以高效的epoll、kqueue、eventport作为网络IO模型,在高并发场景下,Nginx能够轻松支持5w并发连接数的响应,并且消耗的服务器内存、CPU等系统资源消耗却很低,运行稳定。 大型网站Web服务的主流,Nginx的分支Tengine(http://tengine.taobao.org/)目前也在飞速发展。

 Lighttpd:是一款高安全性、快速,且灵活的web服务器产品,专为高性能环境而设计的。相比其他web服务器,内存占用量小,能够有效管理CPU负载,支持(FastCGI,SCGI,Auth)等重要功能。在Nginx流行前,它是大并发静态业务的首选,国内百度贴吧、豆瓣等众多网站都有Lighttpd奋斗的身影。

2. 常用来提供动态服务的软件

php(FastCGI):大中小型网站都会使用,动态网页语言PHP程序的解析容器。它可配合Apache解析动态程序,不过,这里的PHP不是FastCGI守护进程模式,而是mod_php5.so(module)。也可配合Nginx解析动态程序,此时的PHP常用FastCGI守护进程模式提供服务。

 Tomcat:是一个开源、运行基于java的web应用软件的容器,Tomcat Server和JSP规范执行,但是Tomcat对于平台文件、高并发处理较弱。中小企业动态Web服务主流,互联网Java容器主流(如jsp、do)。

 Resin:大型动态Web服务主流,互联网Java容器主流(如jsp、do)。

二、 nginx软件功能介绍

1 作为web服务软件(处理用户访问静态请求)

2 反向代理或者负载均衡服务

3 前端业务数据缓存服务

三、nginx软件特征介绍

1. 支持高并发:能支持几万并发连接(特别是静态小文件业务环境)

2. 消耗资源少:在3万并发连接下,开启10个nginx线程消耗的内存不到200MB

3. 支持异步网络I/O事件模型epoll(Linux 2.6+)

四、nginx架构组成

五、nginx安装

1. Linux系统安装软件方式

1)rpm安装:优点—简单、快速;缺点—需要rpm包,解决依赖关系很困难,无法定制化

2)yum安装:优点—简单、易用、高效。自动解决依赖关系; 缺点—不能选择软件版本或者软件存放的路径,无法定制化

3)编译安装:优点—可以自定义安装(选择版本、软件路径、针对性优化);缺点—很慢、安装复杂、需要GCC编译器等环境

4)二进制安装:mysql软件一般会提供这种二进制安装方式,其他软件很少用

2. 编译安装nginx

第一个里程:软件依赖包安装

pcre-devel: perl语言正则表达式兼容软件包

openssl-devel:使系统支持https方式访问

 [root@web01 ~]# yum install -y pcre-devel openssl-devel

 [root@web01 ~]# rpm -qa pcre-devel openssl-devel

 第二个里程:创建一个管理Nginx进程的虚拟用户

[root@web01 ~]# useradd www -s /sbin/nologin -M

[root@web01 ~]# id www

uid=1001(www) gid=1001(www) groups=1001(www)

第三个里程:下载Nginx源码包、上传到web01的/server/tools目录并解压

[root@web01 ~]# cd /server/tools/

[root@web01 tools]# wget http://nginx.org/download/nginx-1.12.2.tar.gz

[root@web01 tools]# tar zxf nginx-1.12.2.tar.gz

第四个里程:软件编译安装

软件编译安装三部曲:

①. 编译配置

./configure --prefix=/application/nginx-12.2 --user=www --group=www --with-http_ssl_module --with-http_stub_status_module

其中:

--prefix=PATH 指定软件安装在什么目录下

--user=USER 指定软件worker进程管理用户,利用www虚拟用户管理worker进程

--group=USER

--with-http_ssl_module 使nginx程序可以支持HTTPsF访问功能

--with-http_stub_status_module 用于监控用户访问nginx服务情况

②. 编译过程 make

③. 编译安装 make install

[root@web01 tools]# cd nginx-1.12.2/

[root@web01 nginx-1.12.2]# ./configure --prefix=/application/nginx-1.12.2 --user=www --group=www --with-http_ssl_module --with-http_stub_status_module

[root@web01 nginx-1.12.2]# echo $?   ##查看配置过程是否正确,0表示没有问题

0  

[root@web01 nginx-1.12.2]# make && make install

[root@web01 nginx-1.12.2]# echo $?  

第五个里程:为nginx程序软件创建链接目录,便于网站更新和维护

[root@web01 ~]# ln -s /application/nginx-1.12.2/ /application/nginx

第六个里程:启动Nginx服务

[root@web01 nginx-1.12.2]# /application/nginx/sbin/nginx

[root@web01 nginx-1.12.2]#  ps -ef|grep nginx

root       9184      1  0 21:24 ?        00:00:00 nginx: master process /application/nginx/sbin/nginx

www        9185   9184  0 21:24 ?        00:00:00 nginx: worker process

root       9187   6520  0 21:24 pts/0    00:00:00 grep --color=auto nginx

[root@web01 nginx-1.12.2]# lsof -i:80

COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME

nginx   9184 root    6u  IPv4  37758      0t0  TCP *:http (LISTEN)

nginx   9185  www    6u  IPv4  37758      0t0  TCP *:http (LISTEN)

第七个里程:为方便管理可以修改PATH环境变量

[root@web01 nginx-1.12.2]# echo "PATH=$PATH:/application/nginx/sbin" >> /etc/profile

[root@web01 nginx-1.12.2]# tail -1 /etc/profile

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin: /application/nginx/sbin

[root@web01 nginx-1.12.2]# source /etc/profile

[root@web01 nginx-1.12.2]# echo $PATH

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin: /application/nginx/sbin

第八个里程:检查nginx启动实际效果

在windows下通过浏览器检测方法:

打开浏览器输入:http://10.0.0.7,然后回车,结果如图所示

六、nginx软件的目录结构说明

conf --- nginx程序所有配置文件保存目录

html --- nginx程序站点目录

logs --- nginx程序日志文件保存目录

sbin --- nginx程序命令所在目录

nginx命令参数说明:

-V --- 查看nginx软件编译配置参数

-t --- 检查nginx配置文件语法格式是否正确

-s --- 用于管理nginx服务运行状态

        stop 停止nginx服务

        reload 平滑重启nginx服务器

        重启nginx服务:

       nginx -s stop 先停止

       nginx 再启动

nginx.conf nginx程序主配置文件

1. 精简nginx.conf配置文件内容:

   grep -Ev "#|^$" nginx.conf.default >nginx.conf



2. nginx配置文件

1)nginx配置文件组成:

①. main nginx主区块,位于整个配置文件最上层。

②. event nginx事件区块

③. http nginx http功能区块

④. server nginx 网站主机区块

⑤. location nginx 匹配或者定位区块

2)nginx配置文件语法格式说明:

①. 大括号要成对出现

②. 每一行指令后面要用分号结尾

③. 每一个指令要放置在指定的区块中

3)虚拟主机配置文件编写方法:

①. 基于域名的虚拟主机配置方法(最常用)

②. 基于端口的虚拟主机配置方法

说明:当你访问的网站域名在虚拟主机配置中不存在时,默认会将第一个虚拟主机的配置页面响应给用户

③. 基于IP地址的虚拟主机配置方法

说明:nginx服务中只要涉及IP地址的修改,都需要重启nginx服务,而不能采用平滑重启

4)实践

(1)实现编写一个或多个网站页面(基于域名)

   第一个里程:编写配置文件   

[root@web01 ~]# vim /application/nginx/conf/nginx.conf

[root@web01 ~]# cat /application/nginx/conf/nginx.conf

   第二个里程:创建站点目录

[root@web01 ~]# mkdir /application/nginx/html/{www,blog,bbs}

   第三个里程:创建站点目录下首页文件

[root@web01 ~]# for i in www blog bbs;do echo "10.0.0.7 $i.test.org" >/application/nginx/html/$i/test.html;done

[root@web01 ~]# for i in www blog bbs;do cat /application/nginx/html/$i/test.html;done

10.0.0.7 www.test.org

10.0.0.7 blog.test.org

10.0.0.7 bbs.test.org

   第四个里程:进行访问测试

[root@web01 ~]# curl -H host:www.test.org 10.0.0.7/test.html

10.0.0.7 www.test.org

[root@web01 ~]# curl -H host:bbs.test.org 10.0.0.7/test.html

10.0.0.7 bbs.test.org
[root@web01 ~]# curl -H host:blog.test.org 10.0.0.7/test.html

10.0.0.7 blog.test.org

(2)实现编写一个或多个网站页面(基于端口)

   第一个里程:编写配置文件,更改端口

[root@web01 ~]# vim /application/nginx/conf/nginx.conf

检测nginx配置文件语法

[root@web01 ~]# nginx -t

nginx: the configuration file /application/nginx-1.12.2/conf/nginx.conf syntax is ok

nginx: configuration file /application/nginx-1.12.2/conf/nginx.conf test is successful

   第二个里程:进行访问测试

[root@web01 ~]# curl -H host:bbs.test.org:8080 10.0.0.7:8080/test.html

10.0.0.7 www.test.org

[root@web01 ~]# curl -H host:bbs.test.org:8081 10.0.0.7:8081/test.html

10.0.0.7 blog.test.org

[root@web01 ~]# curl -H host:bbs.test.org:8082 10.0.0.7:8082/test.html

10.0.0.7 bbs.test.org

(3)实现编写一个或多个网站页面(基于IP地址)

   第一个里程:在服务器网卡上配置多个IP

   每个主机上有不同的虚拟IP地址,此处以增加辅助IP的形式临时在eth0网卡上添加2个不同的ip地址  

[root@web01 ~]# ip addr add 10.0.0.9/24 dev eth0 label eth0:9

[root@web01 ~]# ip addr add 10.0.0.10/24 dev eth0 label eth0:10

   第二个里程:编写配置文件

[root@web01 ~]# vim /application/nginx/conf/nginx.conf

[root@web01 ~]# cat /application/nginx/conf/nginx.conf

检查配置文件语法

[root@web01 ~]# nginx -t
nginx: the configuration file /application/nginx-1.12.2/conf/nginx.conf syntax is ok
nginx: configuration file /application/nginx-1.12.2/conf/nginx.conf test is successful

重启nginx

[root@web01 ~]# nginx -s stop

[root@web01 ~]# nginx

[root@web01 ~]# ps -ef |grep nginx

root 23595 1 0 17:13 ? 00:00:00 nginx: master process nginx

www 23596 23595 0 17:13 ? 00:00:00 nginx: worker process

root 23598 6775 0 17:13 pts/0 00:00:00 grep --color=auto nginx

   第三个里程:进行访问测试

[root@web01 ~]# curl 10.0.0.7/test.html

10.0.0.7 www.test.org

[root@web01 ~]# curl 10.0.0.9/test.html

10.0.0.7 blog.test.org

[root@web01 ~]# curl 10.0.0.10/test.html

10.0.0.7 bbs.test.org

(4)企业实用案例:每个网站目录配置文件进行分割

   规范优化nginx配置文件,nginx的主配置文件为nginx.conf,主配置文件包含的所有虚拟主机的子配置文件会统一放入extra目录中,虚拟主机的配置文件按照网站的域名或功能取名,如www.conf等。

   这里使用的参数是include

   第一个里程:编写主配置文件

[root@web01 ~]# vim /application/nginx/conf/nginx.conf

[root@web01 ~]# cat /application/nginx/conf/nginx.conf

   第二个里程:虚拟主机子配置文件

[root@web01 ~]# vim /application/nginx/conf/extra/blog.conf

[root@web01 ~]# vim /application/nginx/conf/extra/bbs.conf 

[root@web01 ~]# vim /application/nginx/conf/extra/www.conf

检测nginx配置文件语法,并平滑重启nginx

[root@web01 ~]# nginx -t

nginx: the configuration file /application/nginx-1.12.2/conf/nginx.conf syntax is ok

nginx: configuration file /application/nginx-1.12.2/conf/nginx.conf test is successful

[root@web01 ~]# nginx -s reload

[root@web01 ~]# netstat -lntup |grep nginx

tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 23595/nginx: master

   第三个里程:进行访问测试

[root@web01 ~]# curl -H host:www.test.org 10.0.0.7/test.html

10.0.0.7 www.test.org

[root@web01 ~]# curl -H host:bbs.test.org 10.0.0.7/test.html

10.0.0.7 bbs.test.org

[root@web01 ~]# curl -H host:blog.test.org 10.0.0.7/test.html

10.0.0.7 blog.test.org

3. nginx日志文件

1)error_log 级别分为 debug, info, notice, warn, error, crit 默认为crit

该级别在日志名后边定义格式如下:

error_log /your/path/error.log crit;

crit 记录的日志最少,而debug记录的日志最多

如果nginx遇到一些问题,比如502比较频繁出现,但是看默认的error_log并没有看到有意义的信息,那么就可以调一下错误日志的级别,当你调成error级别时,错误日志记录的内容会更加丰富。

2)语法格式:
Syntax:error_log file [level];
示例:
error_log logs/www_error.log error;

3)访问日志

官方链接:http://nginx.org/en/docs/http/ngx_http_log_module.html#access_log

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 logs/access.log main;     --- 调用定义格式信息,生成访问日志

$remote_addr 10.0.0.1                      --- 访问客户端的源地址信息

$remote_user                                    - --- 访问客户端认证用户信息 ???

[$time_local]                                      --- 显示访问时间

$request GET / HTTP/1.1                  --- 请求行信息

$status 304                                        --- 状态码信息(304状态码利用缓存显示页面信息)

$body_bytes_sent                             --- 服务端响应客户端的数据大小信息

$http_referer                                      -- 记录链接到网站的域名信息 ???

$http_user_agent                               --- 用户访问网站客户端软件标识信息

$http_x_forwarded_for                       ---  反向代理

 编写脚本,配置访问日志

[root@web01 ~]# vim /application/nginx/conf/nginx.conf

检测配置脚本语法

[root@web01 ~]# nginx -t

nginx: the configuration file /application/nginx-1.12.2/conf/nginx.conf syntax is ok

nginx: configuration file /application/nginx-1.12.2/conf/nginx.conf test is successful

重新加载nginx

[root@web01 ~]# nginx -s reload

[root@web01 ~]# netstat -lntup |grep nginx

tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 23595/nginx: master

测试访问

[root@web01 ~]# curl -H host:blog.test.org 10.0.0.7/test.html

10.0.0.7 blog.test.org

查看访问日志

[root@web01 ~]# cat /application/nginx/logs/www_access.log

10.0.0.7 - - [06/Jun/2020:20:19:54 +0800] "GET /test.html HTTP/1.1" 200 23 "-" "curl/7.29.0" "-"

有时因日志文件数据过大,需进行日志分割

利用shell脚本实现日志切割

[root@web01 ~]# cat /server/scripts/cut_log.sh
#!/bin/bash

data_info=$(date +%F-%H:%M)

mv /application/nginx/logs/www_access.log /application/nginx/logs/access.log.$data_info

/application/nginx/sbin/nginx -s reload

检测脚本

[root@web01 ~]# bash /server/scripts/cut_log.sh

[root@web01 ~]# ls /application/nginx/logs/

access.log access.log.2020-06-06-20:26 blog_access.log error.log nginx.pid www_access.log www_error.log

设置定时任务

[root@web01 ~]# crontab -e

crontab: installing new crontab

[root@web01 ~]# crontab -l

#crond-id-0001:time sync by test

*/5 * * * * /usr/sbin/ntpdate pool.ntp.org >/dev/null 2>&1

#crond-id-0002: cut nginx access log

* */6 * * * /bin/sh /server/scripts/cut_log.sh >/dev/null 2 >&1

以上是关于Nginx介绍的主要内容,如果未能解决你的问题,请参考以下文章

nginx介绍

四十LNMP架构介绍MySQL安装PHP安装Nginx介绍

LNMP架构结介绍,MySQL和PHP的安装以及Nginx介绍

Nginx介绍

介绍+安装Nginx的介绍和安装详解

LNMP架构介绍 MySQL安装 PHP安装 Nginx介绍