nginx服务

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.反向代理:本身可以作为一个反向代理的服务器,将客户端的请求转发给后端多个服务器,可以实现负载均衡、高可用。提高整个集群的性能以及可靠性。
反向代理图解:
nginx服务_第1张图片
总结:反向代理的核心功能是:客户端在请求时,通过代理服务器,会把请求的流量按照轮询算法,转发到后台不同的服务器,实现负载均衡和高可用。
3.处理动态内容(nginx处理动态内容能力很差,apache很强,nginx需要依靠php node.js java python等来处理动态内容,nginx自身没有动态内容请求能力但是可以代理请求,发送到后端的动态服务器进行处理,动态服务器处理完成后,由nginx把动态请求响应给客户端)
4.SSl/TLS加密,HTTPS的加密方式,数字证书验证机制。
5.虚拟主机:nginx可以在一台服务器上设置多个主机,同一个服务器可以有多个域名和站点。
6.URL重定向。可以实现灵活的URL重写和重定向。
7.缓存功能,nginx自带缓存功能。(get才可以进行缓存,post不可以进行缓存)
nginx服务_第2张图片
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 #修改权限

安装好后生成四个文件功能如下

  1. conf:保存nginx所有的配置文件,其中nginx.conf是nginx服务器的最核心最主要的配置文件,
    其他的.conf则是用来配置nginx相关的功能的.
    例如fastcgi功能使用的是fastcgi.conf和fastcgi_params两个文件,
    配置文件一般都有个样板配置文件,是文件名.default结尾,使用的使用将其复制为并将default去掉即可。

  2. html目录中保存了nginx服务器的web文件,但是可以更改为其他目录保存web文件,
    另外还有一个50x的web文件是默认的错误页面提示页面。

  3. logs:用来保存nginx服务器的访问日志错误日志等日志,
    logs目录可以放在其他路径,比如/var/logs/nginx里面。

  4. 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当中,只能写在全局配置)
nginx服务_第3张图片

面试题:
如何修改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服务器和用户的网络连接。
    nginx服务_第4张图片
    【http块】:只针对http请求的配置、代理、缓存、虚拟主机、反向代理。(upstream反向代理指定服务器的命令,配置在http模块中)
    nginx服务_第5张图片

【server块】:包含在http模块中,不能单独设置

配置虚拟主机的相关参数,一个http模块当中可以由多个server块
nginx服务_第6张图片
【location块】:匹配uri,包含在server块中,也不能单独设置。
nginx服务_第7张图片
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模块中)
nginx服务_第8张图片
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服务_第9张图片
测试配置文件并退出:

nginx -t

在这里插入图片描述
重启nginx服务:

systemctl restart nginx

打开浏览器进行访问:http://20.0.0.105/status #IP地址为服务器ip
nginx服务_第10张图片
解释:
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服务_第11张图片
测试配置文件并退出:

nginx -t

重启nginx服务:

systemctl restart nginx

打开浏览器进行访问:http://20.0.0.105/status #IP地址为服务器ip
nginx服务_第12张图片
nginx服务_第13张图片
实验三:
基于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服务_第14张图片

测试配置文件并退出:

 nginx -t

重启nginx服务

systemctl restart nginx

测试:
用20.0.0.101访问:curl 20.0.0.105

nginx服务_第15张图片
用20.0.0.102访问:curl 20.0.0.105

nginx服务_第16张图片
实验四:基于域名的 Nginx 虚拟主机

虚拟主机,创建多的主机器,基于一个主机创建多个页面。
1.域名类型:

为虚拟主机准备网页文档
mkdir -p /var/www/html/xiaoma
mkdir -p /var/www/html/xiaoyuan
echo “

www.xiaoma.com

” > /var/www/html/xiaoma/index.html
echo “

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服务_第17张图片
测试配置文件并退出:

nginx -t

重启nginx服务

systemctl restart nginx.service 

测试:
nginx服务_第18张图片
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;
	}
}	
}

nginx服务_第19张图片
3.设置虚拟ip地址:

ifconfig ens33:0 20.0.0.120 netmask 255.255.255.0 

nginx服务_第20张图片
测试:www.20.0.0.120
nginx服务_第21张图片

www.20.0.0.105
nginx服务_第22张图片
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服务_第23张图片

nginx -t

重启nginx服务

systemctl restart nginx.service 

测试:www.20.0.0.105:8080
nginx服务_第24张图片

www.20.0.0.105:9090

nginx服务_第25张图片

你可能感兴趣的:(nginx,运维,linux,服务器)