美文网首页
docker上使用Nginx详解

docker上使用Nginx详解

作者: 木木子丶 | 来源:发表于2020-08-23 00:05 被阅读0次

启动

docker run --name nginx_test -d -p 80:80 nginx 

进入容器

docker exec -it nginx容器ID /bin/bash

配置文件位置

日志文件位置:/var/log/nginx
配置文件位置: /etc/nginx
资源存放的位置: /usr/share/nginx/html

编写nginx.conf 无效

  • 使用vim nginx.conf 或者vi nginx.conf

会发现vi或者vim命令没有用,解决办法:apt-get update 完成之后 apt-get install vim

此时你就可以自己定制nginx.con文件了,改好配置文件之后重启容器,步骤,先把容器停了

docker stop nginx 然后重启 docker start nginx

  • 还有第二种方式,挂载配置文件,就是把装有docker宿主机上面的nginx.conf配置文件映射到启动的nginx容器里面,这需要你首先准备好nginx.con配置文件,如果你应经准备好了,下一步是启动nginx

启动挂载外部配置文件

docker run --name nginx -p 80:80 -v /home/docker-nginx/nginx.conf:/etc/nginx/nginx.conf -v /home/docker-nginx/log:/var/log/nginx -v /home/docker-nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf -d nginx

  • --name 给你启动的容器起个名字,以后可以使用这个名字启动或者停止容器

  • -p 映射端口,将docker宿主机的80端口和容器的80端口进行绑定

  • -v 挂载文件用的,第一个-v 表示将你本地的nginx.conf覆盖你要起启动的容器的nginx.conf文件,第二个表示将日志文件进行挂载,就是把nginx服务器的日志写到你docker宿主机的/home/docker-nginx/log/下面

第三个-v 表示的和第一个-v意思一样的。

  • -d 表示启动的是哪个镜像

注意

server 里面的listner就是他的访问ip和端口
注意 默认情况下,可能会未开启防火墙拦截,访问不到,需要手动放出来


命令

firewall -cmd --reload

常用命令

使用nginx操作命令前提条件: 必须进入nginx的目录 /usr/local/nginx/sbin

  • 查看版本号
    ./nginx -v
  • 启动nginx
    ./nignx
  • 关闭nginx
    ./nginx -s stop
  • 重新加载
    ./nginx -s reload

配置文件

/usr/local/nginx/nginx.conf

配置文件组成

全局块 :从配置文件到events块之间组成的内容,主要会设置一些影响nginx服务器整体运行的配置指令,主要包括配置运行nginx服务器的用户(组),允许生成的worker process数,进程pid存放路径,日志存放路径和类型,以及配置文件的引入等

  • worker_processes 1


    这是nginx服务器并发处理服务的关键配置,数值越大,可以支持的并发处理也越多

events块 :涉及的指令主要影响Nginx服务器与用户的网络连接

  • 是否开启对多 work process下的网络连接进行序列化
  • 是否允许接收多个网络连接
  • 选取那种时间驱动模型来处理连接请求
  • 每个word process可以同时支持的最大连接数等

http 全局块(比较频繁配置)

  • server块 :最常见的配置是本虚拟机主机的监听配置和本虚拟机主机的名称或IP配置
  • localtion块 :一个server块可以配置多个location块,主要作用是基于Nginx服务器接收到的请求字符串,对虚拟主机名称之外的字符串进行匹配,地址定向,数据缓存等

my_mac 模版

 upstream myserver {
     server 192.168.3.16:8001;
     server 192.168.3.16:8002;
    }
    server {
    listen 80;
    charset utf-8;
    server_name 192.168.3.16;

    location / {
     proxy_pass http://myserver;
     proxy_redirect default;
     }
    }

反向代理

根据 zimu.com:80 跳到 192.168.10.31:8080

server {
    
    listen 80:
    server_name www.zimu.com
    
    location /{
        root html;
        proxy_pass http://192.168.10.31:8080
    }
}

访问xxx:9001/edu 跳转xxx:8001,访问xxx:9001/vod 跳转xxx:8081

server {
    listen 9001
    server_name 192.168.10.31
    
    localtion ~ /edu/ {
        proxy_pass http:127.0.0.1:8080
    }
    location ~ /vod/ {
        proxy_pass http:127.0.0.1:8081
    }
}

  • = : 用于不含正则表达式的uri,要求请求字符串与uri严格匹配,如果匹配成功,就停止继续向下搜索并立即处理该请求
  • ~ : 用于表示uri包含正则表达式,并且区分大小写
  • ~* : 用于表示uri包含正则表达式,并且不区分大小写
  • ^~ : 用于不含正则表达式uri,要求Nginx服务器找到表示uri和请求字符串匹配度最高的location后,立即使用location处理请求,而不再使用location块中的正则uri和请求字符串做匹配

负载均衡

http{
    upstream myserver{
        server 192.168.10.31:8081;
        server 192.168.10.31:8082;
    }
    
    server {
        listen 80:
        server_name 192.168.1.37
        
        location / {
         proxy_pass http://myserver
        }
        
    }
    
}

自己定义服务器转发集合,定义到转发哪里

分配方式

轮询(默认)

weight 权重策略

upstream myserver{
        server 192.168.10.31:8081 weight=5;
        server 192.168.10.31:8082 weight=10;
    }

ip_hash 每个用户指定访问某一台服务器(可以解决session共享)

upstream myserver{
        ip_hash;
        server 192.168.10.31:8081 weight=5;
        server 192.168.10.31:8082 weight=10;
    }

fair 按响应时间最短来分配

upstream myserver{
        server 192.168.10.31:8081 weight=5;
        server 192.168.10.31:8082 weight=10;
        fair;
    }

动静分离

概念

Nginx动静分离就是动态跟静态请求分开,不能理解只是单纯的把动态页面和静态页面物理分离,可以理解成使用Nginx处理静态页面,Tomcat处理动态页面

server {
    listen 80:
    server_name 192.168.10.31
    
    location /www/ {
        root /data/;
    }
    
    location /image/ {
        root /data/;
        #列出当前文件夹
        autoindex on;
    }
}

高可用

一块虚拟ip绑定两台Nginx, 两台Nginx跳转多台Tomcat,这样即使一台Nginx挂了,也可以成功跳转

相关文章

网友评论

      本文标题:docker上使用Nginx详解

      本文链接:https://www.haomeiwen.com/subject/qndmjktx.html