Linux学习:Nginx进阶基础1

目录

一、nginx概述

二、nginx特性

1、nginx特性

2、Nginx和apache的对比

(1)内核和功能上的比较

(2)一般功能比较

(3)nginx相比较apache的优点

三、nginx IO多路复用

1、I/O模型

四、nginx的内部技术架构

五、nginx虚拟主机

1、虚拟主机

2、基于域名的虚拟主机


一、nginx概述

nginx是一个高性能的HTTP和反向代理服务,也是一个IMAP/POP3/SMTP服务。nginx是由伊戈尔~赛索耶夫开发的。其源代码以类BSD许可证的形式发布,因其稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。Nginx是一款轻量级的web服务器/反向代理服务器及电子邮件代理服务器,并在一个BSD-like协议下发行。

其特点是占有内存小,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好。

二、nginx特性

1、nginx特性

nginx是一个高性能的web和反向代理服务器,具有非常优越的特性:

(1)作为web服务器

可以作为HTTP代理服务器和反向代理服务器,支持通过缓存加速访问,可以完成简单的负载均衡和容错,支持过滤功能,支持ssl等;相比于apache,nginx使用更少的资源,支持更多的并发连接,体现更高的效率。

(2)作为负载均衡器

可以自定义配置,支持虚拟主机,支持URL重定向,支持网络监控,支持流媒体传输等。nginx既可以在内部直接支持Rails和PHP,也可以支持作为HTTP代理服务器对外进行服务。

(3)作为邮件代理服务器

nginx同时也是一个非常优秀的邮件代理服务器,支持IMAP/POP3代理服务功能,支持内部SMTP代理服务器。

(4)nginx的安装非常简单,配置文件非常简洁(还能够支持Perl语法),bugs非常少的服务器

nginx启动特别容易,并且几乎可以做到全周不间断运行。

2、Nginx和apache的对比

(1)内核和功能上的比较

特性NginxApache
请求管理事件驱动模型,使用异步套接字处理,较少的内存和CPU开销同步套接字,进程和线程,每个请求都要使用一个单独的进程或线程,使用同步套接字
设计语言c语言c、c++
可移植性多平台多平台
诞生时间20021994

(2)一般功能比较

功能nginxapache
HTTPS支持作为模块使用作为模块使用
虚拟主机原生支持原生支持
CGI支持仅支持FastCGI支持CGI和FastCGI
系统模块静态模块系统动态模块系统

(3)nginx相比较apache的优点

  • 轻量级,同样web服务器比apache占用更少的内存及资源;

  • 静态处理,nginx静态处理性能比apache高3倍以上;

  • 抗并发,nginx处理请求是异步非阻塞的,而apache则是阻塞型的。在高并发下nginx能保持低资源低消耗高性能;

  • 高度模块化的设计,编写模块相对简单;

  • 社区活跃,各种高性能模块出品迅速。

三、nginx IO多路复用

1、I/O模型

同步阻塞I/O(blocking IO):即传统的IO模型

用户发起read IO读操作,由用户空间转到内核空间。内核等到数据包到达后,然后将接收的数据拷贝到用户空间,完成read操作;用户需要等待read将socket中的数据读取到buffer后,才能继续处理接收的数据。整个IO请求的过程中,用户线程是被阻塞的,这导致用户在发起IO请求时,不能做任何事情,对CPU的资源利用率不够。

同步非阻塞I/O

用户线程发起IO请求时立即返回,但并未读取到任何数据,用户线程需要不断地发起IO请求,知道数据到达后,才能真正读取到数据,继续执行;用户需要不断的调用read,尝试读取socket中的数据,才继续处理接收的数据。整个IO请求的过程中,虽然用户线程每次发起IO请求后可以立即返回,但是为了等到数据,仍需要不断轮询,重复请求,消耗了大量的CPU的资源。

I/O多路复用

用户在发起请求建立起socket,首先将需要进行IO操作的socket添加到事件驱动模型中,然后等待驱动模型系统调用返回。当数据到达时,socket被激活,驱动模型函数返回。用户线程正式发起read请求,读取数据并继续执行。但是使用函数以后最大的优势是可以在一个线程内同时使用多个socket的IO请求。用户可以注册多个socket,然后不断地调用驱动模型读取被激活的socket,即可达到同一线程同时处理多个IO请求的目的。

四、nginx的内部技术架构

nginx服务器,以其处理网络请求的高并发、高性能及高效率,获得了行业内的广泛应用,并广泛应用于反向代理和负载均衡。

1、nginx启动时,会生成两种类型的进程,一种是主进程(Master),一种是工作进程(worker);主进程负责调度工作进程,主要是三项:加载配置,启动工作进程,及非停升级。

2、服务器实际处理网络请求及响应的是工作进程,在Linux系统上,nginx可以配置多个worker,而每个worker进程都可以同时处理数以千计的网络请求。

3、模块化设计。nginx将各个功能模块组织成一条链,当请求到达时候,请求依次经过这条链上的部分或者全部模块,进行处理。每个模块实现特定的功能。

五、nginx虚拟主机

1、虚拟主机

虚拟主机是一种特殊的软硬件技术,它可以将网络上的每一台计算机分成多个虚拟主机,每个虚拟主机可以独立多外提供www服务,这样就可以实现一台主机对外提供多个web服务,每个虚拟主机之间是独立的,互不影响

配置位置

此章内容,既可以在七层代理服务层配置,也可以在业务逻辑层配置。但七层代理层配置的虚拟主机常配合nginx的ngx_http_proxy_module模块使用。而业务逻辑层配置的虚拟主机常配合nginx的ngx_http_fastcgl_moudle

nginx支持的三种类型虚拟主机配置

基于域名的虚拟主机

基于Ip的虚拟主机

基于端口的虚拟主机

2、基于域名的虚拟主机

server:192.168.40.143

web:192.168.40.141

(1)配置通过域名区分的虚拟机

安装并查看nginx服务状态

[root@localhost /]# yum -y install nginx

[root@localhost /]# systemctl status nginx

查看主配置文件

[root@localhost ~]#vim /etc/nginx/nginx.conf

写入配置:

[root@localhost ~]#vim /etc/nginx/conf.d/test.conf

server {
        listen 80 default_server;
        listen [::]:80 default_server;
        server_name _;
        root /usr/share/nginx/html;
        #load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;
        location / {
        }
        error_page 404 /404.html;
                location = /40x.html {
        }
        error_page 500 502 503 504 /50x.html;
                location = /50x.html {
        }
}
#虚拟主机1
server {
        listen 80 ;
        server_name www.eryuan01.com;
        root /usr/share/nginx/web1;
        access_log  /var/log/www.eryuan01.com.log main;
        error_log  /var/log/www.eryuan01.com.error.log;
        location /{
                index index.html;
        }
}
#虚拟主机2
server {
        listen 80 ;
        server_name www.eryuan02.com;
        root /usr/share/nginx/html;
        access_log  /var/log/www.eryuan02.com.log main;
        error_log  /var/log/www.eryuan02.com.error.log;
        location / {
                index index.html;
        }
        location /test {
                index index.html;
        }
}

(2)准备页面

www.eryuan01.com的虚拟服务器1的页面:

[root@localhost ~]# cd /usr/share/nginx/
[root@localhost nginx]# ll
总用量 0
drwxr-xr-x 3 root root 136 8月   5 15:38 html
drwxr-xr-x 2 root root   6 10月 19 2021 modules

在里面创建一个web1目录,在web1里面创建一个index.html,并在index.html里面写www.eryuan01.com

[root@localhost nginx]# mkdir web1
[root@localhost web1]# touch index.html
[root@localhost web1]# ls
index.html
[root@localhost web1]# vim index.html
[root@localhost web1]# cat index.html
www.eryuan01.com

在域名为www.eryuan02.com的虚拟服务器2的页面:

打开/usr/share/nginx/html/目录,编写index.html,并新建test,编写内容

[root@localhost web1]# cd /usr/share/nginx/html/
[root@localhost html]# vim index.html
[root@localhost html]# cat index.html

 

编写测试页面

[root@localhost nginx]#  cd /usr/share/nginx/html/
[root@localhost html]# mkdir test
[root@localhost html]# cd  test/
[root@localhost test]# ll
总用量 0
[root@localhost test]# touch index.html
[root@localhost test]# ll
总用量 0
-rw-r--r-- 1 root root 0 8月  13 19:11 index.html
[root@localhost test]# vim index.html
[root@localhost test]# cat index.html
this is test.index.html

(3)启动nginx服务

[root@localhost /]# systemctl start nginx
[root@localhost /]# ps aux|grep nginx
root      13060  0.0  0.1  39304  1116 ?        Ss   17:38   0:00 nginx: master process /usr/sbin/nginx
nginx     13061  0.0  0.1  41792  1952 ?        S    17:38   0:00 nginx: worker process
root      57146  0.0  0.0 112824   980 pts/1    R+   19:53   0:00 grep --color=auto nginx

(4)测试:

在web虚拟机上,编写hosts文件:

[root@localhost ~]# vim /etc/hosts

192.168.40.143 www.eryuan01.com 192.168.40.143 www.eryuan02.com

然后进行如下测试:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值