1.Nginx简介
Nginx是lgor Sysoev为俄罗斯访问量第二的rambler.ru站点设计开发的。从2004年发布至今,凭借开源的力量,已经接近成熟与完善。
Nginx功能丰富,可作为HTTP服务器,也可作为反向代理服务器,邮件服务器。支持FastCGI、SSL、Virtual Host、URL Rewrite、Gzip等功能。并且支持很多第三方的模块扩展。
Nginx的稳定性、功能集、示例配置文件和低系统资源的消耗让他后来居上,在全球活跃的网站中有12.18%的使用比率,大约为2220万个网站。
2.Nginx在Linux上安装
建议下载稳定版本的
![在这里插入图片描述](https://img-blog.csdnimg.cn/93268c1944dc4529bd180a10299a0f6e.jpeg)
2.2把压缩包上传到Linux中
![在这里插入图片描述](https://img-blog.csdnimg.cn/0c85b61ef2bf45a2899914ba7c2fec9c.png)
2.3 安装依赖环境
①安装gcc环境
yum install gcc-c++
②安装PCRE库,用于解析正则表达式
yum install -y pcre pcre-devel
③zlib压缩和解压依赖
yum install -y zlib zlib-devel
④SSL 安全的加密的套接字协议层,用于HTTP安全传输,也就是https
yum install -y openssl openssl-devel
2.4.解压,需要注意,解压后得到的是源码,源码需要编译后才能安装
tar -zxvf nginx-1.20.2.tar.gz
2.5 编译之前,先创建nginx临时目录,如果不创建,在启动nginx的过程中会报错
mkdir /var/temp/nginx -p
2.6 在nginx目录,输入如下命令进行配置,目的是为了创建makefile文件
./configure \
--prefix=/usr/local/nginx \
--pid-path=/var/run/nginx/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/temp/nginx/client \
--http-proxy-temp-path=/var/temp/nginx/proxy \
--http-fastcgi-temp-path=/var/temp/nginx/fastcgi \
--http-uwsgi-temp-path=/var/temp/nginx/uwsgi \
--http-scgi-temp-path=/var/temp/nginx/scgi
我这里的代码时一行一行运行的,如果一块运行有问题
![在这里插入图片描述](https://img-blog.csdnimg.cn/28f8c0e848fd45848631485e4dfa60d2.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/cd846f8e3e5542a58855defa30d356a9.png)
配置命令:
命令 |
解释 |
–prefix |
指定nginx安装目录 |
–pid-path |
指向nginx的pid |
–lock-path |
锁定安装文件,防止被恶意篡改或误操作 |
–error-log |
错误日志 |
–http-log-path |
http日志 |
–with-http_gzip_static_module |
启用gzip模块,在线实时压缩输出数据流 |
–http-client-body-temp-path |
设定客户端请求的临时目录 |
–http-proxy-temp-path |
设定http代理临时目录 |
–http-fastcgi-temp-path |
设定fastcgi临时目录 |
–http-uwsgi-temp-path |
设定uwsgi临时目录 |
–http-scgi-temp-path |
设定scgi临时目录 |
2.7make编译
make
2.8 安装
make install
2.9 进入sbin目录启动nginx
./nginx
![在这里插入图片描述](https://img-blog.csdnimg.cn/f8485e9be1d740afb56415654c6af696.png)
3.0 Nginx进程模型
3.1查看Nginx进程命令
ps -ef|grep nginx
![在这里插入图片描述](https://img-blog.csdnimg.cn/806ac9f3412b48d8bfcc0909cff70974.jpeg)
Nginx进程模型
master 进程:主进程
(只有一个)
worker 进程:工作进程
(默认只有一个,可以在nginx/conf/nginx.conf文件下设置多个)
![在这里插入图片描述](https://img-blog.csdnimg.cn/a26282fe08654d34930d93fca39e86d3.png)
master进程用于管理work进程,接受来自外界的信号、指令并传递给worker,会监控worker,若worker异常退出,会重新启动worker
worker关闭时,会等待当前客户端连接释放后,才会关闭
多进程虽然会带来额外的内存开销,采用多进程而不采用多线程的原因:
- 进程之间相互独立,互不影响,某一个worker出问题不会影响其他worker
- 不需要开发人员去额外关注线程安全性
![在这里插入图片描述](https://img-blog.csdnimg.cn/21dc8e0dc30e43afa1d2ace6b2bdf3e7.png)
worker具体做事情处理请求
master监控、创建、对worker发送执行指令
//指令
./nginx -s stop //停止NGINX
./nginx -s quit
./ngnix -s reload //修改配置文件后需要重新加载
./nginx -t //检验配置文件修改的是否正确
2.基于Docker安装以及运行
①下载最新nginx镜像
docker pull nginx
![在这里插入图片描述](https://img-blog.csdnimg.cn/2020030423015436.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTExMTc0MQ==,size_16,color_FFFFFF,t_70)
②运行nginx容器
docker run -id -p 80:80 nginx
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200304230337822.png)
③重启nginx容器
docker restart 容器id
④关闭nginx容器
docker stop 容器id
3.Nginx原理以及配置文件讲解
我们如何来找nginx的安装目录呢,有两种方法;
第一种:通过dockerfile的定义来看;
第二种,简单粗暴,直接搜索
find / -name nginx
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200304230527971.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTExMTc0MQ==,size_16,color_FFFFFF,t_70)
配置文件介绍
nginx.conf
user nginx; #配置worker进程运行用户
worker_processes 1;#配置工程进程数目,根据硬件配置,一般是和CPU数量一致,或者CPU数量的2倍,能达到最佳性能
error_log /var/log/nginx/error.log warn;# 配置全局错误日志文件以及配置级别 [ debug | info | notice | warn | error | crit ]
pid /var/run/nginx.pid;#配置进程pid文件
#events配置
#events 是配置工作模式和连接数
events {
worker_connections 1024;# 配置每个worker进程连接数上限
}
http {
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_nopush on;#开启防止网络阻塞模式
keepalive_timeout 65;#长连接超时时间,单位秒
#gzip on; #开启gzip压缩输出
include /etc/nginx/conf.d/*.conf;
}
default.conf
server {
listen 80;#监听端口
server_name localhost; # 配置服务名
#charset koi8-r;#配置字符集
#access_log /var/log/nginx/host.access.log main;#配置本虚拟主机访问日志
# 匹配/请求 ,/是根路径请求,会被该location匹配到并且处理
location / {
root /usr/share/nginx/html;#root是配置服务器的默认网关根目录位置
index index.html index.htm;#配置首页文件的名称
}
#error_page 404 /404.html;#配置404页面
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;#配置50x错误页面
location = /50x.html {
root /usr/share/nginx/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;
#}
}
4.挂载容器目录启动Nginx容器
为后续方便修改nginx的配置文件,我们将nginx的配置目录copy到宿主机,将其作为新nginx容器启动的共享目录;
cd /home
mkdir data
docker cp 43d093a375ee:/etc/nginx /home/data/nginx
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200304232231181.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200304232237323.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTExMTc0MQ==,size_16,color_FFFFFF,t_70)
5.Nginx反向代理
什么是代理服务器?
代理服务器,客户机在发送请求时,不会直接发送给目的主机,而是先发送给代理服务器,代理服务接受客户机请求之后,再向主机发出,并接收目的主机返回的数据,存放在代理服务器的硬盘中,再发送给客户机。
为什么要使用代理服务器?
1,提高访问速度
由于目标主机返回的数据会存放在代理服务器的硬盘中,因此下一次客户再访问相同的站点数据时,会直接从代理服务器的硬盘中读取,起到了缓存的作用,尤其对于热门站点能明显提高请求速度。
2,防火墙作用
由于所有的客户机请求都必须通过代理服务器访问远程站点,因此可在代理服务器上设限,过滤某些不安全信息。
3,通过代理服务器访问不能访问的目标站点
互联网上有许多开放的代理服务器,客户机在访问受限时,可通过不受限的代理服务器访问目标站点,通俗说,我们使用的翻墙浏览器就是利用了代理服务器,虽然不能出国,但也可直接访问外网。
什么是正向代理?
正向代理,架设在客户机与目标主机之间,只用于代理内部网络对 Internet 的连接请求,客户机必须指定代理服务器,并将本来要直接发送到 Web 服务器上的 Http 请求发送到代理服务器中。
什么是反向代理?
反向代理服务器架设在服务器端,通过缓冲经常被请求的页面来缓解服务器的工作量,将客户机请求转发给内部网络上的目标服务器;并将从服务器上得到的结果返回给 Internet 上请求连接的客户端,此时代理服务器与目标主机一起对外表现为一个服务器。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200306230948518.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTExMTc0MQ==,size_16,color_FFFFFF,t_70)
实现反向代理
启动nginx
docker run -it --name=myNginx -v /home/data/nginx:/etc/nginx -p 80:80 nginx
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200306225447259.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTExMTc0MQ==,size_16,color_FFFFFF,t_70)
启动tomcat
docker run -d -p 8080:8080 tomcat镜像id
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200306225459108.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTExMTc0MQ==,size_16,color_FFFFFF,t_70)
查看应用在docker容器中的IP
docker inspect 容器ID
查看Tomcat的IP : 172.17.0.3
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200306225511933.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTExMTc0MQ==,size_16,color_FFFFFF,t_70)
查看nginx的IP: 172.17.0.2
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200306225516266.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTExMTc0MQ==,size_16,color_FFFFFF,t_70)
修改default.conf配置
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200306225643104.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTExMTc0MQ==,size_16,color_FFFFFF,t_70)
重启nginx容器(通过nginx访问tomcat)
docker restart nginx容器ID
然后通过nginx访问Tomcat,直接输入宿主机IP即可
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200306225825870.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTExMTc0MQ==,size_16,color_FFFFFF,t_70)
修改本机C:\Windows\System32\drivers\etc
目录下的hosts文件可以整个域名映射本机
直接输入aa.com也可以访问Tomcat啦
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200306230117576.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTExMTc0MQ==,size_16,color_FFFFFF,t_70)
注意注意!!!
当docker仓库中的Tomcat无法访问时,就进入Tomcat容器中会发现有两个文件webapps,webapps.dist,只要把webapps文件删除,然后把webapps.dist文件改个名字为webapps即可。(因为打开webapps文件时是空的,而tomcat的配置文件在webapps.dist文件中,所以只要把webapps删除了,给webapps.dist改成webapps就可以了)
为了以后方便使用Tomcat,把改好的这个Tomcat容器copy出来,创建一个自己的Tomcat,以后启动Tomcat的时候就用自己创建的这个Tomcat即可。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200311124055995.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTExMTc0MQ==,size_16,color_FFFFFF,t_70)