web服务器,Nginx介绍,Nginx命令,Nginx配置文件
Web服务器
什么是web服务
web就是B/S架构
-
Web服务器一般指网站服务器,是指驻留于因特网上某种类型计算机的程序,可以处理浏览器等Web客户端的请求并返回相应响应,也可以放置网站文件,让全世界浏览;可以放置数据文件,让全世界下载。
-
WEB服务器也称为WWW(WORLD WIDE WEB)服务器,主要功能是提供网上信息浏览服务。WWW 是 Internet 的多媒体信息查询工具,是 Internet 上近年才发展起来的服务,也是发展最快和目前用的最广泛的服务。正是因为有了WWW工具,才使得近年来 Internet 迅速发展,且用户数量飞速增长。
网络模型(IO多路复用之select、poll、epoll)
- epoll跟select都能提供多路I/O复用的解决方案。在现在的Linux内核里有都能够支持,其中epoll是Linux所特有,而select则应该是POSIX所规定,一般操作系统均有实现。
select
基本原理:select 函数监视的文件描述符分3类,分别是writefds、readfds、和exceptfds。调用后select函数会阻塞,直到有
描述符就绪(有数据 可读、可写、或者有except),或者超时(timeout指定等待时间,如果立即返回设为null即可)函数
返回。当select函数返回后,可以通过遍历fdset,来找到就绪的描述符。
select目前几乎在所有的平台上支持,其良好跨平台支持也是它的一个优点。select的一个缺点在于单个进程能够监视的文件描
述符的数量存在最大限制,在Linux上一般为1024,可以通过修改宏定义甚至重新编译内核的方式提升这一限制 ,但是这样也会
造成效率的降低。
poll
基本原理:poll本质上和select没有区别,它将用户传入的数组拷贝到内核空间 ,然后查询每个fd对应的设备状态,如果设备
就绪则在设备等待队列中加入一项并继续遍历,如果遍历完所有fd后没有发现就绪设备,则挂起当前进程,直到设备就
绪或者主动超时,被唤醒后它又要再次遍历fd。这个过程经历了多次无谓的遍历。
epoll
基本原理:epoll支持水平触发和边缘触发,最大的特点在于边缘触发,它只告诉进程哪些fd刚刚变为就绪态,并且只会通知一次。
还有一个特点是, epoll使用“事件”的就绪通知方式 ,通过epoll_ctl注册fd,一旦该fd就绪,内核就会采用类似
callback的回调机制来激活该fd ,epoll_wait便可以收到通知。
epoll是在2.6内核中提出的,是之前的select和poll的增强版本。相对于select和poll来说,epoll更加灵活,没有描述符限制。
epoll使用一个文件描述符管理多个描述符,将用户关系的文件描述符的事件存放到内核的一个事件表中,这样在用户空间和内核空间
的copy只需一次
参考链接:https://www.cnblogs.com/Anker/p/3265058.html
-
select,poll,epoll都是IO多路复用的机制。I/O多路复用就通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。但select,poll,epoll本质上都是同步I/O,因为他们都需要在读写事件就绪后自己负责进行读写,也就是说这个读写过程是阻塞的,而异步I/O则无需自己负责进行读写,异步I/O的实现会负责把数据从内核拷贝到用户空间。关于这三种IO多路复用的用法,链接如下所示:
Web服务器软件
1、apache
- Apache(音译为阿帕奇)是世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一。它快速、可靠并且可通过简单的API扩充,将Perl/Python等解释器编译到服务器中。
# Apache 和 Nginx 功能对比
Nginx和Apache一样,都是HTTP服务器软件,在功能实现上都采用模块化结构设计,都支持通用的语言接口,
如PHP、Perl、Python等,同时还支持正向和反向代理、虚拟主机、URL重写、压缩传输、SSL加密传输等。
1.在功能实现上,Apache的所有模块都支持动、静态编译,而Nginx模块都是静态编译的,
2.对FastCGI的支持,Apache对Fcgi的支持不好,而Nginx对Fcgi的支持非常好;
3.在处理连接方式上,Nginx支持epoll,而Apache却不支持;
4.在空间使用上,Nginx安装包仅仅只有几百K,和Nginx比起来Apache绝对是庞然大物。
2、Nginx
- Nginx (engine x) 是一个很强大的、高性能的HTTP和反向代理web服务器,同时也提供IMAP/POP3/SMTP服务。Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。
- Nginx代码完全用C语言从头写成,已经移植到许多体系结构和操作系统,包括:Linux、FreeBSD、Solaris、Mac OS X、AIX以及Microsoft Windows。Nginx有自己的函数库,并且除了zlib、PCRE和OpenSSL之外,标准模块只使用系统C库函数。而且,如果不需要或者考虑到潜在的授权冲突,可以不使用这些第三方库。
# 选择Nginx的优势所在
1. 作为Web服务器: Nginx处理静态文件、索引文件,自动索引的效率非常高。
2. 作为代理服务器,Nginx可以实现无缓存的反向代理加速,提高网站运行速度。
3. 作为负载均衡服务器,Nginx既可以在内部直接支持Rails和PHP,也可以支持HTTP代理服务器对外进行服务,
同时还支持简单的容错和利用算法进行负载均衡。
4. 在性能方面,Nginx是专门为性能优化而开发的,在实现上非常注重效率。它采用内核Poll模型(epoll and kqueue ),
可以支持更多的并发连接,最大可以支持对50 000个并发连接数的响应,而且只占用很低的内存资源。
5. 在稳定性方面,Nginx采取了分阶段资源分配技术,使得CPU与内存的占用率非常低。Nginx官方表示,Nginx保持10000个
没有活动的连接,而这些连接只占用2.5MB内存,因此,类似DOS这样的攻击对Nginx来说基本上是没有任何作用的。
6. 在高可用性方面,Nginx支持热部署,启动速度特别迅速,因此可以在不间断服务的情况下,对软件版本或者配置进行升级,
即使运行数月也无需重新启动,几乎可以做到7×24小时不间断地运行。
Nginx
安装Nginx
1、yum安装
[root@web01 ~]# vim /etc/yum.repos.d/nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
[root@web01 ~]# yum install nginx -y
[root@web01 ~]# systemctl stop httpd
[root@web01 ~]# systemctl start nginx
2、二进制安装
略......
3、编译安装
[root@web01 ~]# wget https://nginx.org/download/nginx-1.20.2.tar.gz
[root@web01 ~]# tar -xf nginx-1.20.2.tar.gz
[root@web01 nginx-1.20.2]# ./configure
[root@web01 nginx-1.20.2]# make
[root@web01 nginx-1.20.2]# make install
平滑增加Nginx模块
-
众所周知Nginx是分成一个个模块的,比如core模块,gzip模块,proxy模块,每个模块负责不同的功能,除了基本的模块,有些模块可以选择编译或不编译进Nginx。官网文档中的Modules reference部分列出了nginx源码包的所有模块。我们可以按照自己服务器的需要来定制出一个最适合自己的Nginx服务器。
-
除了Nginx官网源码包提供了各种模块,Nginx还有各种各样的第三方模块。官方文档NGINX 3rd Party Modules也列出了Nginx的很多第三方模块,除此官网列出的之外,还有很多很有用的模块也能在Github等网站上找到。
-
这些模块提供着各种各样意想不到的功能,灵活使用Nginx的第三方模块,可能会有非常大的意外收获。
# 增加模块必须重新编译。
[root@web01 ~]# wget https://nginx.org/download/nginx-1.20.2.tar.gz
[root@web02 ~]# tar -xf nginx-1.20.2.tar.gz
[root@web02 ~]# cd nginx-1.20.2
[root@web02 nginx-1.20.2]#./configure --with-http_ssl_module
[root@web02 nginx-1.20.2]# make
[root@web02 nginx-1.20.2]# make install
# 编译安装无法自动添加到环境变量,需要带上路径查看版本
[root@web01 nginx-1.20.2]# /usr/local/nginx/sbin/nginx -v
# 查看配置参数
[root@web02 nginx-1.20.2]# ./configure --help
# 增加模块,报错直接yum增加依赖即可
[root@web02 nginx-1.20.2]# ./configure --with-http_ssl_module
[root@web02 nginx-1.20.2]# make
[root@web02 nginx-1.20.2]# make install
# 此时可以看见模块已经增加进去了
[root@web01 nginx-1.20.2]# /usr/local/nginx/sbin/nginx -V
Nginx的命令
# -?,-h : 帮助
[root@web01 ~]# nginx -h
nginx version: nginx/1.20.2
Usage: nginx [-?hvVtTq] [-s signal] [-p prefix]
[-e filename] [-c filename] [-g directives]
Options:
1、-v : 版本信息
[root@web01 ~]# nginx -v
nginx version: nginx/1.20.2
2、-V : 版本和配置选项信息
[root@web01 ~]# nginx -V
nginx version: nginx/1.20.2
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC)
built with OpenSSL 1.0.2k-fips 26 Jan 2017
TLS SNI support enabled
configure arguments: --prefix=/etc/nginx
......
3、-t : 检查配置文件是否有语法错误
[root@web01 ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
4、-T : 测试配置文件并启动
[root@web01 ~]# nginx -T
nginx: the configuration file /etc/nginx/nginx.conf syntax is onginx: the configuration file /etc/nginx/nginx.conf syntax is oTk
nginx: configuration file /etc/nginx/nginx.conf test is successful
# configuration file /etc/nginx/nginx.conf:
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;
......
5、-q : 打印错误日志
[root@web01 ~]# nginx -q
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
6、-s : 指定Nginx启动配置(给nginx主进程发送信号)
stop : 停止(快速关闭)
[root@web01 ~]# nginx -s stop
quit : 退出(正常关闭)
[root@web01 ~]# nginx -s quit
reopen : 重启
[root@web01 ~]# nginx -s reopen
reload : 重载
[root@web01 ~]# nginx -s reload
7、-p : 指定nginx的安装路径(默认是:/etc/nginx/)
8、-e : 指定错误日志路径
9、-c : 指定配置文件的路径(默认是:/etc/nginx/nginx.conf)
10、-g : 设置一个全局的Nginx配置项
[root@web01 ~]# nginx -g 'daemon off;' #前端启动
Nginx配置文件
- nginx分为全局配置和模块配置
#/etc/nginx/nginx.conf
-------------------- 全局配置(全局生效) -----------------
user www; #启动nginx work进程的用户名
worker_processes auto; #启动的worker进程数,auto === CPU数量
error_log /var/log/nginx/error.log notice; #错误日志路径
pid /var/run/nginx.pid; #pid的存放文件文件路径
-------------- 系统事件配置模块(全局生效) ---------------
events { #事件配置模块
worker_connections 1024; #最大连接数(每一个worker进程最多同时接入多少个请求)
use epool; #指定Nginx的网络模型
}
-------------- Http请求模块(处理Http请求的模块) --------------
http { #web服务的模块
include /etc/nginx/mime.types; #加载外部的配置项(Nginx可以处理的文件类型)
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 /var/log/nginx/access.log main; #访问日志
sendfile on; #tcp连接配置(高效读取文件)
#tcp_nopush on;
keepalive_timeout 65; #长链接配置(HTTP 1.0 短链接,HTTP 1.1 长连接)
#gzip on; #压缩
include /etc/nginx/conf.d/*.conf; #包含其他文件
}
server { #网址模块
listen 80; #监听的端口
server_name 127.0.0.1; #定义域名
location / { #访问路径
root /blog; #指定的站点目录(网址路径)
index index.php; #指定网址的索引文件
}
超级玛丽和象棋
1、上传代码
# 定义目录
[root@web01 ~]# cd /opt
[root@web01 opt]# mkdir Super_Marie
# 此时需要手动上传文件
[root@web01 opt]# ll Super_Marie/
总用量 176
drwxr-xr-x 2 root root 329 1月 3 21:44 images
-rw-r--r-- 1 root root 1703 1月 3 21:44 index.html
-rw-r--r-- 1 root root 72326 1月 3 21:44 jquery.js
-rw-r--r-- 1 root root 78982 1月 3 21:44 QAuIByrkL.js
-rw-r--r-- 1 root root 4777 1月 3 21:44 VNkyVaVxUV.css
-rw-r--r-- 1 root root 9539 1月 3 21:44 wNGu2CtEMx.js
2、编辑配置文件
[root@web01 opt]# vim /etc/nginx/conf.d/game.conf
server {
listen 80;
server_name game.test.com;
location / {
root /opt/Super_Marie;
index index.html;
}
}
3、测试配置文件是否正常
[root@web01 opt]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
4、重启Nginx
[root@web01 opt]# systemctl restart nginx
5、Windows域名解析
C:\Windows\System32\drivers\etc\hosts
192.168.15.7 game.test.com
6、Mac域名解析
# 切换到root权限
sudo -i
# 编辑/etc/hosts文件,在后面追加内容即可,:wq保存退出
vim /etc/hosts
172.16.1.7 game.test.com