web服务:
国外主流的网站服务还是apache
国内主流的网站服务是:nginx
Nginx网站服务
nginx是一个高性能、轻量级的web服务软件。
nginx的特点:
1.稳定性相对较高。(但是没有apache稳定)
2.系统资源消耗低。体现在处理htpp请求的并发能力很高,单台物理服务器可以处理3w-5w个并发请求。(一般在企业中为了保持服务器的稳定,并发量的设置一般在2w个左右。并发量在2w左右时,占用内存2M左右。keep-alive状态占用内存:3M左右)
nginx的主要功能:
1.静态文件服务:nginx可以直接提供静态文件的服务,HTML,CSS,JavaScript,图片等。能够高效的处理并且响应静态文件的请求。
2.反向代理:本身可以作为一个反向代理的服务器,将客户端的请求转发给后端多个服务器,可以实现负载均衡、高可用。提高整个集群的性能以及可靠性。
反向代理图解:
总结:反向代理的核心功能是:客户端在请求时,通过代理服务器,会把请求的流量按照轮询算法,转发到后台不同的服务器,实现负载均衡和高可用。
3.处理动态内容(nginx处理动态内容能力很差,apache很强,nginx需要依靠php node.js java python等来处理动态内容,nginx自身没有动态内容请求能力但是可以代理请求,发送到后端的动态服务器进行处理,动态服务器处理完成后,由nginx把动态请求响应给客户端)
4.SSl/TLS加密,HTTPS的加密方式,数字证书验证机制。
5.虚拟主机:nginx可以在一台服务器上设置多个主机,同一个服务器可以有多个域名和站点。
6.URL重定向。可以实现灵活的URL重写和重定向。
7.缓存功能,nginx自带缓存功能。(get才可以进行缓存,post不可以进行缓存)
8.nginx自带日志功能,可以详细的记录请求的信息,包括访问时间,请求路径ip地址,响应状态,有助于故障排查。(系统控制日志文件,记录在/var/log/messages。
业务日志在:access.log ;error.log;
access日志记录了谁访问了,都是访问成功的记录。error日志也是记录了谁访问过,但是记录的式失败的记录)
nginx的主要应用场景:
1.静态服务
2.反向代理,负载均衡
3.缓存服务
4.动态服务
面试题:
nginx是如何提高高并发的?
1.nginx自身代码的问题:大量的底层代码进行了优化,同时自带了一个功能模块****epoll模块,支持高并发。
2.nginx也是一个master进程控制多个work进程。master负载收集和分发请求,work是实际执行者。每一个请求进来时,master就会拉起一个work进程来处理请求。同时master进程也负责监控worker的状态,worker的数量和 cpu要一致或者是cpu的两倍。
work处理请求的过程中,只受内存大小的限制,所以可以处理多个请求,再加上nginx本身就是轻量级的服务,处理请求时占用的内存本身就很少,所以可以起到大并发的处理能力。
二者之间相互依赖,相互补充。
安装:nginx
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
2、安装依赖包
yum -y install gcc pcre-devel openssl-devel zlib-devel openssl openssl-devel
3、创建运行用户、组
(Nginx 服务程序默认以 nobody 身份运行,建议为其创建专门的用户账号,以便更准确地控制其访问权限)
useradd -M -s /sbin/nologin nginx
4、编译安装Nginx
cd /opt
tar zxvf nginx-1.22.0.tar.gz -C /opt/
cd nginx-1.22.0/
./configure --prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_ssl_module \
--with-http_v2_module \
--with-http_realip_module \
--with-http_stub_status_module \
--with-http_gzip_static_module \
--with-pcre \
--with-stream \
--with-stream_ssl_module \
--with-stream_realip_module
解释:
--prefix=/usr/local/nginx 指定了Nginx的安装目录。在这种情况下,它将安装在 /usr/local/nginx 目录下。
--user=nginx 和 --group=nginx 指定了运行Nginx进程的用户和组。在这种情况下,它将是用户和组 nginx。
--with-http_ssl_module 启用了对HTTP连接的SSL/TLS加密支持。
--with-http_v2_module 启用了对HTTP2.0协议的支持。
--with-http_realip_module 允许Nginx从X-Real-IP或X-Forwarded-For头部获取客户端的真实IP地址。
--with-http_stub_status_module 启用了 stub_status 模块,提供了访问Nginx状态信息的方法。
--with-http_gzip_static_module 启用了支持使用 .gz 扩展名提供预压缩文件的功能。
--with-pcre 启用了对Perl Compatible Regular Expressions(PCRE)库的支持。
--with-stream 启用了对TCP/UDP代理模块的支持。
--with-stream_ssl_module 启用了对TCP/UDP连接的SSL/TLS加密支持。
--with-stream_realip_module 允许Nginx从PROXY协议头部获取客户端的真实IP地址。
安装:
make && make install
chown -R nginx.nginx /usr/local/nginx #修改权限
安装好后生成四个文件功能如下
-
conf:保存nginx所有的配置文件,其中nginx.conf是nginx服务器的最核心最主要的配置文件,
其他的.conf则是用来配置nginx相关的功能的.
例如fastcgi功能使用的是fastcgi.conf和fastcgi_params两个文件,
配置文件一般都有个样板配置文件,是文件名.default结尾,使用的使用将其复制为并将default去掉即可。 -
html目录中保存了nginx服务器的web文件,但是可以更改为其他目录保存web文件,
另外还有一个50x的web文件是默认的错误页面提示页面。 -
logs:用来保存nginx服务器的访问日志错误日志等日志,
logs目录可以放在其他路径,比如/var/logs/nginx里面。 -
sbin:保存nginx二进制启动脚本,可以接受不同的参数以实现不同的功能
ln -s /usr/local/nginx/sbin/nginx /usr/sbin/
创建一个指向/usr/local/nginx/sbin/nginx的软链接,并将其命名为/usr/sbin/nginx。这样就可以在/usr/sbin/目录下执行nginx命令来启动nginx服务
让系统识别nginx的操作命令
nginx -t:检查配置文件是否配置正确
nginx -v:查看nginx的版本号
nginx -s 向主进程传输信号,停止、开启 、重启、重新加载(nginx -s stop ;nginx-s start ;nginx -s reload)
nginx-c:设置配置文件的默认路径
nginx信号符号
信号符结合kill命令:
kill -USR1 pid号 #日志分割
kill -s HUP pid号 #重新加载(只要是kill只能跟pid号)
killall -s HUP nginx #重新加载或重启Nginx服务器(既可以跟服务名,也可以用pid)
kill -s QUIT pid号 #优雅退出,有人访问时不会结束进程,访问完成后才会结束进程。
kill -s WINCH pid号 #优雅的结束worker,直到请求完成才会结束worker进程。
nginx的yum安装方式:
必须需要epel源 (工作环境一般情况下不使用yum安装)
yum install -y epel-release
yum install nginx -y
nginx的配置文件:
vim/usr/local/nginx/conf/nginx.conf
【全局块】:全局生效,所有模块,所有用户都生效(stream 反向代理:四层代理,走的是tcp或者udp流量,不能写在http当中,只能写在全局配置)
面试题:
如何修改linux服务器,文件的最大打开数量:
1.临时:ulimit -n 65535 (linux最大只支持打开65535)
2.永久修改:vim /etc/security/limits.conf
65535 为Linux系统最大打开文件数
- soft nproc 65535
- hard nproc 65535
- soft nofile 65535
- hard nofile 65535
注意:设置保存后,需要重新ssh连接才会看到配置更改的变化
ulimit -a :查看linux服务器最大打开数量
【events块】:影响nginx服务器和用户的网络连接。
【http块】:只针对http请求的配置、代理、缓存、虚拟主机、反向代理。(upstream反向代理指定服务器的命令,配置在http模块中)
【server块】:包含在http模块中,不能单独设置
配置虚拟主机的相关参数,一个http模块当中可以由多个server块
【location块】:匹配uri,包含在server块中,也不能单独设置。
location模块中:
location / 中的 '/ '匹配的是uri,默认指的是:usr/local/nginx
root指向:/html
他俩做拼接即是: /usr/local/nginx/html/
root作用是拼接 ,拼接/后和root 后的目录(root指定的目录和location匹配的uri之间做的一个拼接,这两个目录都要真实存在,而且都是目录,并且在uri目录里面要有web文件)
alias:匹配指定路径下的web文件。
对于root后边有无/ 无所谓,但是alias后面加了/,访问时后也需要加/,否则匹配不到
root和alias区别:
root标签可以使用重定向
alias不可以使用重定向
【反向代理配置】:porxy_pass (在 location模块中)
upstream:七层代理,基于ip和端口,走http协议,只能写在http模块中。
stream:四层代理,走的是tcp或者udp流量,不能写在http当中,只能写在全局配置。
实验一:
访问统计状态统计
vim /usr/local/nginx/conf/nginx.conf
......
http {
......
server {
listen 80;
server_name www.my.com;
charset utf-8;
location / {
root html;
index index.html index.php;
}
##添加 stub_status 配置##
location /status {
#访问位置为/status
stub_status on;
#打开状态统计功能
access_log off;
#关闭此位置的日志记录
}
}
}
测试配置文件并退出:
nginx -t
重启nginx服务:
systemctl restart nginx
打开浏览器进行访问:http://20.0.0.105/status #IP地址为服务器ip
解释:
Active connections :表示当前的活动连接数;
server accepts handled requests:表示已经处理的连接信息,
三个数字依次表示:已处理的连接数、成功的TCP握手次数、 已处理的请求数。
实验二:
基于用户名和访问密码的控制
1.生成用户密码认证文件
yum install -y httpd-tools ----httpasswd是工具,要先安装
htpasswd -c /usr/local/nginx/passwd.db zhangsan 创建一个用户,passwd.db存储用户信息
chown nginx /usr/local/nginx/passwd.db 只有root和nginx用户可以读
chmod 400 /usr/local/nginx/passwd.db
vim /usr/local/nginx/conf/nginx.conf
......
server {
location / {
......
location /status {
stub_status on;
access_log off;
##添加认证配置##
auth_basic "secret";
auth_basic_user_file /usr/local/nginx/passwd.db;
}
}
测试配置文件并退出:
nginx -t
重启nginx服务:
systemctl restart nginx
打开浏览器进行访问:http://20.0.0.105/status #IP地址为服务器ip
实验三:
基于ip地址的访问规则:
访问控制规则如下:
deny IP/IP 段:拒绝某个 IP 或 IP 段的客户端访问。
allow IP/IP 段:允许某个 IP 或 IP 段的客户端访问。
规则从上往下执行,如匹配则停止,不再往下匹配。
vim /usr/local/nginx/conf/nginx.conf
......
server {
......
##添加控制规则##
deny 20.0.0.101; #拒绝访问的客户端 IP
}
}
测试配置文件并退出:
nginx -t
重启nginx服务
systemctl restart nginx
测试:
用20.0.0.101访问:curl 20.0.0.105
用20.0.0.102访问:curl 20.0.0.105
实验四:基于域名的 Nginx 虚拟主机
虚拟主机,创建多的主机器,基于一个主机创建多个页面。
1.域名类型:
为虚拟主机准备网页文档
mkdir -p /var/www/html/xiaoma
mkdir -p /var/www/html/xiaoyuan
echo “
www.xiaoma.com
” > /var/www/html/xiaoma/index.htmlecho “
www.xiaoyuan.com
” > /var/www/html/xiaoyuan/index.html修改Nginx的配置文件
vim /usr/local/nginx/conf/nginx.conf
......
http {
......
server {
listen 80;
server_name www.xiaoma.com; #设置域名www.xiaoma.com
charset utf-8;
access_log logs/www.xiaoma.access.log;
location / {
root /var/www/html/xiaoma; #设置www.xiaoma.com 的工作目录
index index.html index.php;
}
error_page 500 502 503 504 /50x.html;
location = 50x.html{
root html;
}
}
server {
listen 80;
server_name www.xiaoyuan.com; #设置域名www.xiaoyuan.com
charset utf-8;
access_log logs/www.xiaoyuan.access.log;
location / {
root /var/www/html/xiaoyuan;
index index.html index.php;
}
error_page 500 502 503 504 /50x.html;
location = 50x.html{
root html;
}
}
}
测试配置文件并退出:
nginx -t
重启nginx服务
systemctl restart nginx.service
测试:
IP地址类型:可以根据虚拟ip地址进行创建
2.基于端口的虚拟主机:
vim /usr/local/nginx/conf/nginx.conf
......
http {
......
server {
listen 20.0.0.105:80; #设置监听地址
server_name www.xiaoma.com;
charset utf-8;
access_log logs/www.xiaoma.access.log;
location / {
root /var/www/html/xiaoma;
index index.html index.php;
}
error_page 500 502 503 504 /50x.html;
location = 50x.html{
root html;
}
}
server {
listen 20.0.0.120:80; #设置虚拟监听地址
server_name www.xiaoyuan.com;
charset utf-8;
access_log logs/www.xiaoyuan.access.log;
location / {
root /var/www/html/xiaoyuan;
index index.html index.php;
}
error_page 500 502 503 504 /50x.html;
location = 50x.html{
root html;
}
}
}
3.设置虚拟ip地址:
ifconfig ens33:0 20.0.0.120 netmask 255.255.255.0
测试:www.20.0.0.120
www.20.0.0.105
4.基于端口的 Nginx 虚拟主机:
vim /usr/local/nginx/conf/nginx.conf
http {
......
server {
listen 20.0.0.105:8080; #设置监听地址
server_name www.xiaoma.com;
charset utf-8;
access_log logs/www.xiaoma.access.log;
location / {
root /var/www/html/xiaoma;
index index.html index.php;
}
error_page 500 502 503 504 /50x.html;
location = 50x.html{
root html;
}
}
server {
listen 20.0.0.105:9090; #设置虚拟监听地址
server_name www.xiaoyuan.com;
charset utf-8;
access_log logs/www.xiaoyuan.access.log;
location / {
root /var/www/html/xiaoyuan;
index index.html index.php;
}
error_page 500 502 503 504 /50x.html;
location = 50x.html{
root html;
}
}
}
nginx -t
重启nginx服务
systemctl restart nginx.service
测试:www.20.0.0.105:8080
www.20.0.0.105:9090