lab1:HTTP服务器访问本地的资源
Nginx超级简单入门:https://blog.csdn.net/huangliequan/article/details/77214595 效果:访问http://localhost:8020/显示d:images/index.html
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 8020;
server_name localhost;
location / {
root d:images;
index index.html;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
lab2:反向代理
Nginx超级简单入门:https://blog.csdn.net/huangliequan/article/details/77214595 效果:当我们访问localhost:8020的时候,就相当于访问localhost:8000
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 8020;
server_name localhost;
location / {
root d:images;
index index.html;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
lab3:静态服务器
Nginx超级简单入门:https://blog.csdn.net/huangliequan/article/details/77214595 效果:文件会从不同的目录中映射(取决于请求):/data/www(放置 HTML 文件)和 /data/images(放置图片)。当接收到 http://localhost/images/example.png 的请求响应时,nginx 会返回 d:/data/images/example.png 文件。
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 8020;
server_name localhost;
location / {
root d:/data/www;
}
location /images/ {
root d:/data/;
}
}
}
lab4:搭建一个简易的代理服务
Nginx超级简单入门:https://blog.csdn.net/huangliequan/article/details/77214595 效果1:访问localhost:8020,nginx 相当于访问localhost:8000。 效果2:当接收到后缀为png、gif、jpg时,nginx 会映射到d:/data/images/。
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 8020;
server_name localhost;
location / {
proxy_pass http://localhost:8000;
}
location ~ \.(gif|jpg|png)$ {
root d:/data/images;
}
}
}
效果1截图 效果2截图
lab5:location基本语法
nginx系列之五: 负载均衡:https://blog.csdn.net/qq_29677867/article/details/90114076 效果1:访问http://localhost:8020/index.html,显示401 效果2:访问http://localhost:8020/,显示402 效果3:访问http://localhost:8020/documents/document.html,显示403 效果4:访问http://localhost:8020/images/1.gif,显示404 效果5:访问http://localhost:8020/dddd/1.gif,显示500
= 精确匹配,如果找到匹配=号的内容,立即停止搜索,并立即处理请求(优先级最高)
-
区分大小写
~* 不区分大小写
^~ 只匹配字符串,不匹配正则表达式
@ 指定一个命名的location,一般用于内部重定义请求,location @name {…}
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 8020;
server_name localhost;
location / {
return 401;
}
location = / {
return 402;
}
location /documents/ {
return 403;
}
location ^~ /images/ {
return 404;
}
location ~* \.(gif|jpg|png|jpeg)$ {
return 500;
}
}
}
lab6:负载均衡
nginx系列之五: 负载均衡:https://blog.csdn.net/qq_29677867/article/details/90114076
负载均衡依赖于upstream模块来实现。upstream来定义虚拟主机static_pools,并可定义多个server(下方只显示一个server localhost:8000)。 同时注意添加proxy_set_header host $host; 这是节点服务器多虚拟主机时的关键配置。
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
upstream static_pools {
server localhost:8000;
}
server {
listen 8020;
server_name localhost;
location / {
proxy_pass http://static_pools;
proxy_set_header host $host;
}
location /images/ {
root d:/data/;
}
}
}
效果:访问动态网站时的截图
效果:访问静态图片时的截图
lab7:反向代理实现使用域名访问本地项目
nginx_反向代理实现使用域名访问本地项目:https://blog.csdn.net/qq3399013670/article/details/100971283 效果:访问manage.enjoyment.com:80,可以转发给127.0.0.1:8000
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 8020;
server_name manage.enjoyment.com;
location / {
proxy_pass http://127.0.0.1:8000;
proxy_set_header host $host;
}
location /images/ {
root d:/data/;
}
}
}
lab8:将docker container的nginx的文件拷贝到windows桌面
docker 文件操作:https://blog.csdn.net/henryhu712/article/details/82084160 以管理员权限来执行cp命令。docker cp :/file/path/within/container /host/path/target 效果:windows桌面可以看到docker container的nginx的文件
docker cp 30455a37c745:/ C:/Users/Z13073219/Desktop/new
lab9:将windows桌面txt文件拷贝到docker container中
docker 文件操作:https://blog.csdn.net/henryhu712/article/details/82084160 以管理员权限来执行cp命令。docker cp filename :/file/path/within/container 效果:docker container可以看到test.txt
docker cp C:/Users/Z13073219/Desktop/new/test.txt 30455a37c745:/
lab10:nginx安装到docker
效果:打开localhost:81,默认链接到容器的80端口,从而打开nginx默认页面。 注意-p 81:80是关键点,80不能更改,81可以更改。
docker pull nginx
docker run --name nginx-test81 -p 81:80 -d nginx
lab11:nginx在docker中设置反向代理成功
效果:打开宿主机的IP:端口(http://192.168.50.124:81/),就可以打开反向代理的网址(http://localhost:8000/)。 nginx反向代理–以docker容器为例:https://blog.csdn.net/weixin_43283513/article/details/112724535
关键:以下设定的反向代理无法成功。proxy_pass http://127.0.0.1:8081; 这是错误写法,使用docker容器反向代理的时候,proxy_pass中不能使用127.0.0.1和localhost,因为实际要指向宿主机的8081端口,但是这里使用127.0.0.1和localhost指向的是容器内的8081,故此无法代理。如果不使用docker而是直接安装的,可以使用127.0.0.1或localhost
server{
listen 80;
charset utf-8;
server_name localhost;
location / {
proxy_pass http://localhost:8000;
proxy_redirect default;
}
}
依路径打开docker的etc/nginx/conf.d/default.conf。
server {
listen 80;
listen [::]:80;
server_name 192.168.50.124;
location / {
root /usr/share/nginx/html;
proxy_pass http://172.24.192.1:8000;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
lab12:nginx在docker中设置反向代理(运用命令行操作)
效果:打开宿主机的IP:端口(http://192.168.50.124:81/),就可以打开反向代理的网址(http://localhost:8000/)。 很多时候没有vscode的IDE,所以必须通过命令行来启动nignx,并nginx容器中设定lab11的反向代理。 nginx反向代理–以docker容器为例:https://blog.csdn.net/weixin_43283513/article/details/112724535
关键:命令行的语句要熟悉。尽量以文件取代文件避免位置错误。以文件夹取代文件夹容易出现位置错误。
过程如下:
docker run --name nignx82 -p 82:80 -d nginx
docker container exec -it nignx82 /bin/bash
docker container cp nignx82:/ C:/Users/Z13073219/Desktop/nginx82
docker container cp C:/Users/Z13073219/Desktop/nginx82/etc/nginx/conf.d/default.conf nignx82:/etc/nginx/conf.d/default.conf
docker restart nignx82
其他可能用到的命令行语句
docker stop nignx82
docker start nignx82
删除文件夹:
例如:删除/etc/nginx/log目录以及其下所有文件、文件夹
rm -rf /etc/nginx/log
删除文件:
例如:强制删除/etc/nginx/log/access.log文件
rm -f /etc/nginx/log/access.log
呈现效果类似于lab11。
lab13:利用commit来生成属于自己的images(以lab12的nignx82为基础)
效果:lab12已在docker内部修改完default.conf,为了便于迁移,我生成一个新的images来保存这次修改。 https://blog.csdn.net/leo15561050003/article/details/71274718
docker commit -m "nginx82_modified_ip" nignx82 nignx:v2
docker run --name nignx82_v2 -p 83:80 -d nignx:v2
这次生成容器后,就可以直接访问代理的网址了。
lab14:django项目生成属于自己的images
效果:编写dockerfile来生成属于自己的images,并成功运行。 【Docker】第一次用docker来部署django项目-20220209:https://blog.csdn.net/m0_46629123/article/details/122848644
lab15:在nginx中建立挂volume
效果:创建数据卷container-vol,并挂在nginx容器的volume_opt路径下。 06-Docker数据管理实践:https://yutian.blog.csdn.net/article/details/119707376
docker volume create container-vol
docker volume ls
docker volume inspect container-vol
[
{
"CreatedAt": "2022-02-24T23:18:29Z",
"Driver": "local",
"Labels": {},
"Mountpoint": "/var/lib/docker/volumes/container-vol/_data",
"Name": "container-vol",
"Options": {},
"Scope": "local"
}
]
docker run --name nginx_vol_container -dit -p 82:80 -v container-vol:/volume_opt/vol nginx bash
docker exec -it 8a16339b66e3 bin/bash
ls
最后可以看到volume_opt被挂靠进来
lab16:本机文件夹运用-v参数挂给container(bind mount)
效果:桌面的test_vol可以在nginx container中找到。 docker $PWD路径_Docker常用操作:https://blog.csdn.net/weixin_39681058/article/details/110088896 Docker Data Volume 之 bind mount:https://blog.csdn.net/qq_34556414/article/details/109298133
docker run -p 89:80 --name test89 -d -v C:/Users/Z13073219/Desktop/test_vol:/usr/share/nginx/html nginx
本机的文件夹: 容器中的文件夹:
lab17:通过volume来持久化保存数据
volume更像是一种对应关系,不是一个文件夹。 效果:test90(container)的html文件夹保存在container-vol2(volume)中,然后test91(container)也是挂container-vol2(volume),你就会发现html文件夹被同步过来。
docker volume create container-vol
- 将container-vol2(volume)挂到test90(container)中
docker run -p 90:80 --name test90 -d -v container-vol2:/usr/share/nginx/html nginx
- 用vscode修改html文件夹的文件
- 将container-vol2(volume)挂到test91(container)中
docker run -p 91:80 --name test91 -d -v container-vol2:/usr/share/nginx/html nginx
- 查看test91(container)的html文件夹是否被同步过来
lab18:持久化保存django的SQLite数据库(bind mount -v)
效果:A网站维护的信息,通过bind mount存在C盘,B网站可以读取。 Docker Data Volume 之 bind mount:https://blog.csdn.net/qq_34556414/article/details/109298133
- 建立A网站localhosts:8000,B网站localhosts:8002
docker run -p 8000:8000 --name pp_test_for_bind_mount -d -v C:/Users/Z13073219/Desktop/SQL/db.sqlite3:/code/package/db.sqlite3 pp4_slim
docker run -p 8002:8000 --name pp_test_for_bind_mount2 -d -v C:/Users/Z13073219/Desktop/SQL/db.sqlite3:/code/package/db.sqlite3 pp4_slim
-
在A网站中修改Z13的数据。 -
在B网站上查看Z13数据是否被修改。 -
在C盘上看SQLite。
lab19:保存volume的办法
最有效的办法,是通过cp来拷贝容器的内容,从而将容器中被volume挂的数据卷一并保存。
docker cp nginx_vol_container:\ C:\Users\Z13073219\Desktop\test1234
lab20:如何在容器启动后再挂volume(暂时找不到策略)
建议是容器启动时就挂好了volume。
lab21:volume抓文件而不是文件夹
参考lab19 运用bind mount来挂文件而不是文件夹,实现精确保存。
lab16:uWSGI
|