0009 Nginx知识点
01 nginx基础概念
1.1 什么是nginx
l 是一个高性能的HTTP和反向代理服务器
l 特点:占有内存少,并发能力强
l 事实上Nginx的并发能力确实在同类型的网页服务器中表现较好
l 可以作为静态页面的web服务器,同时还支持CGI协议的动态语言,如perl、PHP
l 不支持java,java程序只能通过与tomcat配合完成
l 专为性能优化而开发,是线上非常注重效率,能经受高负载的考验,最大支持的并发连接数是50000个
l 支持热部署,启动特别容易,并且几乎做到7*24不间断运行,即使运行几个月也不需要重新启动,还能够在不间断服务的情况下,对软件版本进行升级
1.2 反向代理
1) 正向代理
在客户端(浏览器)配置代理服务器,通过代理服务器进行互联网访问的过程

2)反向代理
反向代理:其实客户端对代理是无感知的,因为客户端不需要任何配置就可以访问。
我们需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器并获取数据,然后在返回给客户端,
此时反向代理服务器和目标服务器对外是一台服务器,暴露的是代理服务器地址,隐藏了真是服务器的IP地址。

1.3 负载均衡
普通请求处理方式:客户端发送多个请求到服务器,服务器处理请求,有一些可能要与数据库进行交互,服务器处理完毕后,再讲结果返回给服务端
单个服务器解决不了,我们增加服务器的数量,然后将请求分发到各个服务器上,将原先请求集中到单个服务器上的情况改为请求分发到多个服务器上,将负载分发到不同的服务器,就是我们所说的负载均衡

1.4 动静分离
为了加快网站的解析速度,可以把动态页面和静态页面由不同的服务器来解析,加快解析速度,降低原来单个服务器的压力

02 nginx安装,常用命令和配置文件
2.1 nginx安装(linux)结合docker
步骤一:docker search nginx

步骤二:拉取最新版本的Nginx

步骤三:新建并运行

步骤四:访问

说明:
安装完成后,我们可以使用以下命令来运行 nginx 容器:
$ docker run --name nginx-test -p 8080:80 -d nginx
参数说明:
- --name nginx-test:容器名称。
- -p 8080:80: 端口进行映射,将本地 8080 端口映射到容器内部的 80 端口。
- -d nginx: 设置容器在在后台一直运行。
注意:
- 其中的会出现加载时间过长的问题,其原因是配置文件中的问题,需要修改
- 配置文件中的端口与启动映射的管口要保持一致才行
安装完成之后,在user多出来一个文件夹local/nginx,在Nginx中有sbin启动脚本

2.2 常用命令
01 使用nginx操作命令的前提条件:必须进入nginx的目录中/user/local/nginx/sbin
02 查看nginx的版本号:./nginx -V

03 启动nginx: ./nginx

04 关闭nginx: ./nginx -s stop

05 查看nginx状态: ps -ef | grep nginx

06 重新加载nginx: ./nginx -s reload

2.3配置文件
01 配位文件的位置

02 配置文件的内容
#===================全局块开始======================
#user nobody;
#工作进程数,一般配置成和cpu数量一致
worker_processes 1;
#全局错误日志及pid文件存放位置
error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#nginx 启动master进程pid号
#pid logs/nginx.pid;
#=================全局块结束============================
#==============events块开始======================
events {
#标识单个worker进程的最大并发数
worker_connections 1024;
}
#============events块结束============================
#============http块开始(nginx服务器中配置最频繁的部分,配置虚拟主机,监听端口,请求转发等等)==========================
http {
#引入 mime 类型定义文件
include mime.types;
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 logs/access.log main;
sendfile on;
#tcp_nopush on;
#连接的超时时间
#keepalive_timeout 0;
keepalive_timeout 65;
#解开注释就是开启gzip压缩
#gzip on;
#此处配置多台tomcat服务器(名称不能有下划线:webServer)
upstream webServer{
server 127.0.0.1:8081;
server 127.0.0.1:8082;
}
#此处配置多台tomcat服务器(名称不能有下划线:webs2Server)
#upstream webs2Server{
#server 192.168.30.19:8083;
#server 192.168.32.12:8085;
#}
server {
#定义当前这个server监听的端口
listen 80;
#定义使用localhost访问
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
#默认请求地址,如果请求是:192.168.10.80:80/ 那么会进入这个里面的tomcat反向代理地址
#一个location里面只能有一个proxy_pass
location / {
#此处可以配置Tomcat反向代理地址比如:
#此处可以引用上面upstream 的多台tomcat;也可以单独配置一台
proxy_pass http://127.0.0.1:8081/; #配置单台
#proxy_pass http://webServer/; #引用上面的多台
#引用上面的多台配置
# root html; #默认的网站根目录的位置
#index index.html index.htm; #网站的欢迎页,起始页
}
#表示如果请求是:192.168.10.80:80/web 那么会进入这个里面的tomcat反向代理地址
location /web {
#此处引用上面的配置的多台tomcat
#proxy_pass http://127.0.0.1:8082/;
#proxy_pass http://w eb2Server/; #引用上面的多台Tomcat配置
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
#错误提示页面
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
# another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
# listen 8000;
# listen somename:8080;
# server_name somename alias another.alias;
# location / {
# root html;
# index index.html index.htm;
# }
#}
# HTTPS server
#
#server {
# listen 443 ssl;
# server_name localhost;
# ssl_certificate cert.pem;
# ssl_certificate_key cert.key;
# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 5m;
# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;
# location / {
# root html;
# index index.html index.htm;
# }
#}
}
03 配置文件组成
1)有但部分组成


03 nginx配置实例-反向代理
1) 实现效果:打开浏览器,在浏览器地址栏输入地址www.123.com,跳转到linux系统tomcat主页面中
2) 准备工作
(1)在linux系统安装tomcat,并使用默认端口8080

(3)在windows系统中通过浏览器访问tomcat服务器

3) 访问过程分析

4) 具体配置
(1) 在nginx中进行 请求转发的配置(反向代理)

5) 最终测试

04 nginx配置实例--反向代理02
1)实现效果:
使用nginx反向代理,根据访问的路径不同跳转到不同端口的服务中去
Nginx监听端口为9001
访问http://127.0.0.1:9001/edu/ 直接跳转到127.0.0.1:8080
访问http://127.0.0.1:9001/vod/ 直接跳转到127.0.0.1:8081
2)准备工作
(1) 准备两个tomcat服务器,一个是8080端口,一个是8081端口
(2) 准备文件夹和测试页面
3)具体配置
(1)找到nginx的配置文件,进行反向代理配置

(2)开放对外访问的端口号 9001, 8080,,8081
4)最终测试

说明:

05 nginx配置实例--负载均衡
1) 实现效果
浏览器地址栏输入地址http://192.168.17.129/edu/a.html 负载均衡效果,平均到8080和8081端口中
2) 准备工作
- 准备两台tomcat服务器,分别是8080,,8081
- 在两台tomcat里面webapps目录中,创建名称为edu文件夹,在edu文件夹中创建页面a.html
3) 在nginx的配置文件中进行负载均衡的配置工作

06nginx分配服务器策略
第一种:轮询(默认)
每个请求按照时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,会被自动踢出
第二种: 权重
weight代表权重,默认为1,权重越高被分配的客户端越多

通过修改weight的值即可
第三种:ip_hash:按照每个请求访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题

可以解决session共享问题
第四种:fair:按后端服务器的响应时间来分配请求,响应时间短的优先分配

07 ngnix配置实例--动静分离
动静分离简单来说就是把动态请求和静态请求分开,不能理解为把动态页面和静态页面物理分离

动静分离的两种方式
- 纯粹的把静态文件独立成单独的域名,放到独立的服务器上,(两个tomcat)(主流推崇)
- 动态和静态文件混合在一起发布,通过nginx来分开处理

1) 准备工作

2) 具体配置
在nginx配置文件中进行配置

3)最终测试


08 nginx配置高可用集群
01 什么是高可用
面临的问题:如果nginx宕机(即请求无法实现的效果)

高可用

(1)需要两台nginx服务器
(2)需要keepalived
(3)需要一个虚拟ip


安装之后,在etc里面生成目录keepalived,有文件keepalived.conf

4.完成高可用配置(主从配置)
配置文件keepalived.conf(两台服务器都需要)


主服务器


脚本文件


备份服务器

脚本文件


最终测试:
(1)在浏览器地址栏输入虚拟ip地址 192.168.17.50

访问

(2)把主服务器(192.168.17.129)nginx和keepalived停止(先停keepalived,再停止nginx),然后输入192.168.17.50,仍能正常访问

从(备)服务器中的效果

浏览器

09 nginx原理解析



浙公网安备 33010602011771号