nginx知识

什么是Nginx

Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔•赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。
其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。2011年6月1日,nginx 1.0.4发布。Nginx是一个web服务器。
Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。

nginx的特征

1、模块化设计,较好的扩展性。旧版本的nginx仅支持在安装nginx时指定安装某个模块,不需要该模块了也不能卸载,除非卸载nginx重装,但现在nginx可以支持需要哪个模块就动态安装,不需要就卸载,这提高了nginx的可扩展性;
2、高可靠。
3、支持热部署。主要体现在:nginx支持不停机更新配置文件;不停机更换日志文件、不停机升级版本(当升级nginx版本时,已连接的用户仍使用旧版本nginx,用户下次连接就直接连接到新版本nginx,新建立的用户链接到新版本的nginx,实现了平滑升级)。
4、低内存消耗。10000个keep-alive连接模式下的非活动连接,仅需2.5M内存。
5、event-driven,aio,mmap,sendfile。

nginx的基本功能

1、静态资源的web服务器;
2、http协议反向代理服务器;
3、pop3/imap4协议反向代理服务器;
4、FastCGI(LNMP),uWSGI(python)等协议;
5、模块化(非DSO),如zip,SSL模块。

nginx的程序架构

nginx的程序架构:Master/Worker结构(只有进程,没有线程)
1个master进程:负责加载和分析配置文件、管理worker进程、平滑升级;
1个worker或多个worker进程:负责处理并响应客户的请求;
缓存相关的进程:cache loader负责载入缓存对象,cache manager负责管理缓存对象。
在这里插入图片描述

2种Nginx安装方式介绍

首先第一步先安装好Nginx所需的依赖包:yum -y install gcc gcc-c++ make pcre-devel zlib-devel openssl-devel
1、使用tar包源码编译安装
进入 http://nginx.org/en/download.html网站下载最新的稳定版nginx源码包nginx-1.18.0.tar,把该源码包放到CentOS上解压即可使用 ./configure&&make&&make install安装即可。
2、使用yum方式安装
首先yum info nginx查看光盘可获得的nginx镜像,如果没有,需要到官网下载一个镜像仓库,如下图
在这里插入图片描述
根据自己的Linux版本,建立yum镜像仓库
在这里插入图片描述
最后 yum info nginx即可看到已经找到最新稳定的nginx包了,这时就可以使用 yum install nginx了。
在这里插入图片描述
注意:yum 方式安装的nginx,其默认安装路径可能与源码包方式安装的路径不一样,安装完后使用find / -name nginx查看nginx的安装路径即可,同时yum 方式安装的nginx默认会自动生成一个nginx的用户,源码包方式安装需要自己创建一个nginx用户,该nginx用户就是运行worker进程的用户,建议创建该用户为/bin/nologin,默认情况下worker进程使用nobody用户运行的。

讲解源码包安装Nginx

下面使用tar包源码编译安装nginx,下载好nginx-1.18.0.tar并上传到Linux上,tar -xf nginx-1.18.0.tar,然后就会解压出一个nginx-1.18.0目录,cd nginx-1.18.0/下
在这里插入图片描述
执行 ./configure --help 查看安装帮助:
在这里插入图片描述
可以看到执行./config 时可以带多个参数来指定安装路径以及要安装的模块,当然也可以不知道参数直接./config,这样就会默认安装路径在/usr/local/nginx下,这里我就指定./configure --with-http_stub_status_module --prefix=/usr/local/nginx user=nginx group=nginx (–with-http_stub_status_module是一个状态统计的模块)
编译完没有报错,echo $? 输出0表示上一条命令执行没有问题,继续
make
echo $? 输出0表示上一条命令执行没有问题
开始安装了
make install
echo $? 输出0表示上一条命令执行没有问题,那么Nginx就安装完成了,如果安装过程中报错了,那就根据报错信息一步步解决,如果是依赖包没有安装那就安装依赖包吧。
安装成功输出页面信息:看,Nginx的安装目录默认在/usr/local/nginx下
在这里插入图片描述

find / -name nginx #查找Nginx的安装路径
在这里插入图片描述
查看nginx命令帮助文档:nginx -h
在这里插入图片描述

nginx的命令

nginx -h 或 nginx -? #打开nginx的帮助信息文档,查看帮助

启动nginx直接输入:nginx #启动Nginx 查看nginx命令 which nginx 输出/usr/local/nginx/sbin/nginx

nginx -v #显示nginx的版本信息并退出

nginx -V #显示nginx版本以及查看安装了哪些配置模块信息等,然后退出

nginx -t #检测nginx配置文件是否存在语法等错误,然后退出

nginx -T #检测nginx配置文件是否存在语法等错误,转储配置文件然后退出

nginx -s signal #向 master 进程发送信号,可发送reopen 、reload、quit、stop等信号

nginx -s reopen #重启Nginx,注意没有restart,本身nginx启动也没有start命令

nginx -s reload #重新加载配置文件并重启,修改了Nginx配置文件重新加载配置文件并优雅的重启Nginx

nginx -s quit #温柔的地停止Nginx服务(等所有的请求都处理完成后才停止nginx服务)

nginx -s stop #立即的、强行的停止nginx服务

nginx -q #在配置测试期间期间不显示、屏蔽非错误信息

nginx -p prefix #设置前缀路径(默认是:/usr/share/nginx/)

nginx -c filename #启动nginx时指定配置文件,不指定就使用默认配置文件(默认:/usr/local/nginx/conf/nginx.conf)

nginx -g directives #这是设置配置文件外的全局指令

查看nginx服务是否真正运行

ps -ef |grep nginx
netstat -tunlp|grep :80
lsof -i:22
nginx是一个web服务器,nginx默认的端口是:80端口
查看指定端口正在被哪个程序占用:netstat -tunlp|grep 80
lsof -i:端口号,用于查看某一端口的占用情况,比如查看22号端口使用情况,lsof -i:22

nginx的配置文件结构

nginx的配置文件可分为4大部分:
1、main block :主配置段,即全局配置段,对所有http、mail都有效
event{
… #事件驱动相关的配置
}
2、http{
… http/https协议的相关配置段
}
3、mail{
… mail协议的相关配置段
}
4、stream{
… stream协议的相关配置段
}

这里我们讲一下http协议的相关配置段:
http{

… #各server的公共配置
server{
listen 80;
server_name 虚拟主机名;
location / {
root html;
index index.html index.htm;
}

						}
		server{
						listen       8080;
						   server_name  虚拟主机名;
						  location / {
        									root   html;
       										 index  index.html index.htm;
  										}
						   
						}

}
一个server就是一个虚拟机主机,也就是一个网站,可以有多个server,也就是说一个nginx服务器可以搭建多个http网站。

nginx配置文件详解

从http://nginx.org/en/docs/中可以得到nginx的配置文档说明书,非常有用,那个命令不知道什么意思,就可以查一下。
打开nginx的配置文件:vim /usr/local/nginx/conf/nginx.conf
先看全局配置段:
在这里插入图片描述
user nobody; #表示运行worker进程的用户是谁,默认是nobody用户,建议创建一个nginx用户来运行worker进程
worker_processes 1; #表示worker进程数,应设为CPU的核心数(查看核心数:cat /proc/cpuinfi中cpu codes 值)
如图所示,只有1个worker_processes:
在这里插入图片描述
将worker_processed改为2,如图所示,有2个worker_processes了:
在这里插入图片描述
#error_log logs/error.log;
#error_log logs/error.log notice; #这些是指定nginx的错误日志信息文件位置;
#error_log logs/error.log info; #error_log 级别分为 debug, info, notice, warn, error, crit 默认为crit, 该级别在日志名后边定义

#pid logs/nginx.pid; #Nginx的pid文件,即master进程的ID号,nginx启动时就创建nginx.pid文件,nginx停止时就删除nginx.pid文件

events {
worker_connetions 1024; #每个worker的最大并发连接数,则nginx总的并发连接数就是:worker_processes*worker_connetions
}
daemon on|off #是否使用守护进程,默认on就是守护进程后台执行,开发时为了方便可以设置为off前台进程实时显示

现在看http配置段
http {
include 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  logs/access.log  main;

sendfile        on;								#是否启用sendfile  ,高效文件传输模式     
#tcp_nopush     on;

#keepalive_timeout  0;
keepalive_timeout  65;					#配置长连接超时时间,默认单位秒

#gzip  on;

server {																					#定义一个虚拟主机
    listen       80;																		#监听端口,默认80
    server_name  localhost;														#虚拟主机的名称,网站一般定义为域名,如www.fujiseiko.com,可以设为IP地址

    #charset koi8-r;
	server_tokens	off;																#是否在响应报文的Server首部隐藏版本信息,off表示隐藏 curl -I www.fujiseiko.com
    #access_log  logs/host.access.log  main;

    location / {										#location后面紧跟的是对于URL的匹配规则,大括号里面的则是这个location的配置
        root   html;											#定义这个location的查找资源的根目录,这个目录可以是相对路径,也可以是绝对路径
        index  index.html index.htm;				#index:定义访问的默认首页
    }

    #error_page  404              /404.html;			#定义错误页

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   html;
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    #location ~ \.php$ {
    #    root           html;
    #    fastcgi_pass   127.0.0.1:9000;
    #    fastcgi_index  index.php;
    #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
    #    include        fastcgi_params;
    #}

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}
}


# another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
#    listen       8000;
#    listen       somename:8080;
#    server_name  somename  alias  another.alias;

#    location / {
#        root   html;
#        index  index.html index.htm;
#    }
#}

优化并拆分nginx主配置文件

我们知道,在生产环境下虚拟主机不能是1个两个,频繁的修改nginx.config配置文件可能会造成系统异常宕机,为了减少错误率,我们可以将单个虚拟主机配置语句拎出来写成一个配置文件,如下:
假设有2个虚拟主机,www.fujiseiko.com、www.sn.com
创建目录专门存放这些配置文件,mkdir -p /usr/local/nginx/vhost
vim /usr/local/nginx/vhost/fujiseiko.conf 添加fujiseiko虚拟主机配置文本:
server {
listen 80;
server_name fujiseiko; #建立fujiseiko虚拟主机
server_tokens off;
location / {
root html;
index index.html index.htm;
}
同理
vim /usr/local/nginx/vhostsn.conf 添加sn虚拟主机配置文本:
server {
listen 80;
server_name sn; #建立sn虚拟主机
server_tokens off;
location / {
root html;
index index.html index.htm;
}
两个虚拟主机的配置文件都建立完了,使用include语句把他们加入到nginx的主配置文件当中去;
vim /usr/local/nginx/nginx.conf
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
include /usr/local/nginx/vhost/*.conf; #使用include语句把他们加入nginx的主配置文件中。完美。
}

猜你喜欢

转载自blog.csdn.net/MssGuo/article/details/114285260
今日推荐