ralp的nginx从入门到跑路---01 nginx的介绍与安装

Nginx 基本简述

1 常见的 HTTP 服务

  • Apache -> Apache 基金会
  • Nginx -> 俄罗斯伊戈尔·赛索耶夫为
  • IIS -> 微软
  • GWS -> Google
  • Openrestry ->基于 Nginx 与 Lua 的高性能 Web 平台
  • tengline -> 淘宝基于 Nginx 开发

随着计算机与 Internet 技术的蓬勃发展,形形色色的 Web 站点成为直接面向用户的中坚力量。在各种网站服务器软件中,Apache HTTP Server 无疑是其中的佼佼者,Microsoft IIS 则位居其次。本章将学习另一个 Web 服务器软件——Nginx,由俄罗斯的lgor Sysoev 开发,在短短的数年内市场占有率迅速跃居第三位的轻量级、高性能的 HTTP服务器。

Nginx(发音[engine X])专为性能优发而开发,其最知明的优点是他的稳定性和低系统资源的消耗,以及对 HTTP 并发连接的高处理能力(单台物理服务器可以 30000-50000个并发连接),正因为如此,大量提供社交网站、新闻资讯、电子商务以及虚拟主机等服务的企业纷纷选择 Nginx,来提供 Web 服务,如新浪、网易、腾讯、51CTO、人人网等。根据 2018 年 11 月份的 Netcraft.com 的统计报告,Nginx 市场点有率接近 30%( 而且这个数数字正在快速上升。

在这里插入图片描述

Nginx 应用场景

静态处理、反向代理、负载均衡、资源缓存、安全防护、访问限制、访问认证

Nginx 优秀特性

Nginx(engine x) 是开源的一款轻量级、高性能的 HTTP 和反向代理服务。在连接高并发的情况下,Nginx 是 Apache 服务不错的替代品,Ngin 能够支持高达 50,000 个并发连接。

Nginx 基于 IO 多路复用,IO 复用解决的是并发性的问题,Socket 作为复用, IO 多路复用的实现方式有 select、poll、epoll

加粗样式


**select 和epoll的区别**
select 就类似于教师去问轮流(从学号为1的同学到50号同学)去问同学 没有没问题,来帮你解决。如果某一个学生有问题 那么就停下来处理 同学的问题然后在接下去问
epoll 就类似于 教师想全部同学访问 全班同学有无问题,有问题举手,老师解决


**什么是套接字?**

套接字(socket)是一个抽象层,应用程序可以通过它发送或接收数据,可对其进行像对文件一样的打开、读写和关闭等操作。套接字允许应用程序将I/O插入到网络中,并与网络中的其他应用程序进行通信。网络套接字是IP地址与端口的组合。

轻量级: 功能模块少,代码模块化

CPU 亲和(affinity):将 CPU 核心和 Nginx 工作进程绑定方式,把每个 worker 进程固定在一个 cpu 上执行,减少切换 cpu 的 cache miss,获得更好的性能。

在这里插入图片描述worker和CPU的核数相关 一个worker 可以处理过万的请求
相互的worker 之间不影响

Sendfile:文件传输是在内核中操作完成的, 函数直接在两个文件描述符之间传递数据, 从而避免了内核缓冲区数据和用户缓冲区数据之间的拷贝, 操作效率很高, 被称之零拷贝。
在这里插入图片描述传统文件传输数据实际上是经过了四次复制操作:
硬盘—>内核 buf—>用户 buf—>socket 缓冲区(内核)—>协议引擎

用户态和内核态之间的转换叫做一次上下文的切换,经过一次上下文的切换,那么cpu就有转换一次,那么效率就低很多

在这里插入图片描述这里没有用户空间和内核空间之间的切换,在内核中直接完成了从一个 buffer 到另一个buffer 的拷贝。

nginx 的安装

可以查看官方网站的 文档
链接: http://nginx.org/en/linux_packages.html#instructions.

小主的nginx安装脚本 —centos7

#!/bin/bash
<<END
19-07
BY.RALPH
centos7安装nginx
END

 
systemctl stop firewalld
systemctl disable firewalld
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

rm -rf /var/run/yum.pid
echo "installing packages !"
yum install -y lrzsz wget httpd-tools vim tree curl &> /dev/null
echo "successed!"

cat > /etc/yum.repos.d/nginx.repo << EOF
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/\$basearch/
gpgcheck=0
enabled=1
EOF

rm -rf /var/run/yum.pid
yum -y install nginx
if [ $? -ne 0 ];then
	echo "nginx install failed"
	exit 1
else
	echo "nginx install successed"

fi

nginx -v
systemctl restart nginx
nginx -s reload
nginx -t     

nginx -s reload 从新加载
nginx -t 测试语法

打开浏览器认证 输入IP:
在这里插入图片描述
nginx中的文件模块
在这里插入图片描述

nginx 的常用模块:

Nginx 编译选项模块作用
ngx_http_core_module包含一些核心的 http 参数配置,对应 Nginx 的配置区块部分
ngx_http_access_module访问控制模块,用来控制网站用户对 Nginx 的访问
ngx_http_gzip_module压缩模块,对 Nginx 返回的数据压缩,属于性能优化模块
ngx_http_fastcgi_modulefastci 模块,和动态应用相关的模块,例如 PHP
ngx_http_proxy_moduleproxy 代理模块
ngx_http_upstream_module负载均衡模块,可以实现网站的负载均衡功能及节点的健康检查。
ngx_http_rewrite_moduleURL 地址重写模块
ngx_http_limit_conn_modul限制用户并发连接数及请求数模块
ngx_http_limit_req_module限制 Nginx request processing rate 根据定义的key
ngx_http_log_module访问日志模块,以指定的格式记录 Nginx 客户访问日志等信息
ngx_http_auth_basic_modulWeb 认证模块,设置 Web 用户通过账号密码访问 Nginx
nginx_http_ssl_module ssl模块,用于加密的 http 连接,如 https

Nginx 内置变量

$uri: 当前请求的 uri,不带参数
$request_uri: 请求的 uri,带完整参数
$host: http 请求报⽂中 host⾸部,如果没有则以处理此请求的虚拟主机的主机名代替
$hostname: nginx 服务运⾏在主机的主机名
$remote_addr: 客户端 IP
$remote_port: 客户端端⼝
$remote_user: 使⽤⽤户认证时客户端⽤户输⼊的⽤户名
$request_filename: ⽤户请求中的 URI 经过本地 root 或 alias 转换后映射的本地⽂件路

$request_method: 请求⽅法, GET POST PUT
s e r v e r a d d r : 服 务 器 地 server_addr: 服务器地 serveraddr:server_name: 服务器名$server_port: 服务器端⼝
$server_protocol: 服务器向客户端发送响应时的协议, 如 http/1.1 http/1.0
$scheme:在请求中使⽤scheme, 如 http://xxx.com 中的 http
$http_HEADER: 匹配请求报⽂中指定的 HEADER
$http_host: 匹配请求报⽂中的 host⾸部
$document_root: 当前请求映射到的 root 配置

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值