背景

  • Nginx前端的小宝贝、有了它我们可以玩很多很多东西、笔者在2019年接触到了小宝贝、起初使用云服务器一点一点的配置环境(真的好麻烦呀)安装各种软件对版本也有一定要求装prce库啊、装OpenSSL啥的、踩完好多配置坑、后面初步学习了下docker、三个字 **爽歪歪** 所以笔者准备输出一篇Nginx小笔记、😁

    我们要实现什么

  • 在服务器部署一个静态项目、让外网可以访问😊

  • 配置一个反向代理、用于解决跨域需求😊
  • 配置一个负载均衡的功能、配置权重去访问不同的静态文件😊

    安装docker

  • 查看系统要求(Docker 要求 CentOS 系统的内核版本高于 3.10 ,查看CentOS的内核版本。)

    1. uname -a
  • 删除旧版本(没安装的不用)

    1. yum remove docker docker-common docker-selinux docker-engine
  • 安装需要的软件包(yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的)

    1. sudo yum install -y yum-utils device-mapper-persistent-data lvm2
  • 设置Docker yum源

    1. sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
  • 查看所有仓库中所有docker版本(可以查看所有仓库中所有docker版本,并选择特定的版本安装)

    1. yum list docker-ce --showduplicates | sort -r
  • 安装docker

    1. sudo yum install docker-ce
    2. //如果要安装特定版本使用: sudo yum install docker-ce-18.06.1.ce
    3. //设置为开机启动
    4. systemctl enable docker
    5. //启动
    6. systemctl start docker
    7. //查看状态
    8. systemctl status docker
    9. //查看 版本
    10. docker version

    **以上就是docker的安装步骤、下一步我们要使用docker去安装nginx** docker文档

    Nginx安装

  • 使用docker拉取Nginx镜像 **对于镜像我是这样理解的、它类似一个类、里面有Nginx各种所依赖的环境属性、它把所有的东西都写在类里面、我们只需要按它的配置项传入相对应参数我们就可以得到一个实例(Nginx服务)、我们可以通过这个类创建多个Nginx(我们指容器)**

    1. docker pull nginx:latest //拉取最新版nginx
    2. docker images //查看镜像
  • 创建宿主机与容器映射的配置文件 **这样做的目的在于、我可以直接修改宿主机的配置文件然后重启Nginx容器就可以了、不用进入容器去修改配置文件、直接复制下方创建文件夹指令**

    1. cd /root
    2. mkdir nginx
    3. cd nginx
    4. mkdir conf
    5. mkdir logs
    6. mkdir ssl
    7. mkdir web
    8. cd conf
    9. touch nginx.conf
    10. mkdir conf.d
    11. cd conf.d
    12. touch default.conf

    现在我们创建了需要挂载映射的配置文件、但是文件内都是空的、所以我们要复制一些基础的配置选项进去
    **nginx.config** ```javascript

    运行nginx的用户

    user nginx;

    启动进程设置成和CPU数量相等

    worker_processes 1;

全局错误日志及PID文件的位置

error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid;

工作模式及连接数上限

events {

  1. #单个后台work进程最大并发数设置为1024
  2. worker_connections 1024;

}

http {

  1. #设定mime类型
  2. include /etc/nginx/mime.types;
  3. default_type application/octet-stream;
  4. #设定日志格式
  5. log_format main '$remote_addr - $remote_user [$time_local] "$request" '
  6. '$status $body_bytes_sent "$http_referer" '
  7. '"$http_user_agent" "$http_x_forwarded_for"';
  8. access_log /var/log/nginx/access.log main;
  9. sendfile on;
  10. #tcp_nopush on;
  11. #设置连接超时的事件
  12. keepalive_timeout 65;
  13. #开启GZIP压缩
  14. #gzip on;
  15. include /etc/nginx/conf.d/*.conf;

}

  1. `**default.conf**`
  2. ```javascript
  3. server {
  4. listen 80; #侦听80端口,如果强制所有的访问都必须是HTTPs的,这行需要注销掉
  5. server_name localhost; #域名或IP
  6. # 定义首页索引目录和名称
  7. location / {
  8. root /web/;
  9. index index.html index.htm;
  10. }
  11. #重定向错误页面到 /50x.html
  12. error_page 500 502 503 504 /50x.html;
  13. location = /50x.html {
  14. root /usr/share/nginx/html;
  15. }
  16. }

注意:**server_name换成你自己的IP或者域名哦 好了、准备工作都做好了、现在我们就需要去创建一个Nginx容器了**

  • 使用指令创建容器、文件挂载映射 、创建 Nginx 容器

    1. docker run --detach \
    2. --name demo-nginx --restart=always --privileged=true \
    3. -p 80:80 \
    4. -v /root/nginx/web:/web:rw\
    5. -v /root/nginx/conf/nginx.conf:/etc/nginx/nginx.conf/:rw\
    6. -v /root/nginx/conf/conf.d/default.conf:/etc/nginx/conf.d/default.conf:rw\
    7. -v /root/nginx/logs:/var/log/nginx/:rw\
    8. -v /root/nginx/ssl:/ssl/:rw\
    9. -d nginx

    这里主要做了端口的映射、和文件的挂载功能

    Nginx验收

    **静态文件代理**

  • 查看是否容器创建成功

    1. docker ps //查看运行的容器、看是否有你run的容器、看name是否是 demo-nginx
  • 创建显示的静态文件

    1. cd /root/nginx/web
    2. touch index.html
    3. vi index.html
    4. //然后在里面随便写一些内容在进行保存
    5. :wq //保存
    6. //重启docker容器
    7. docker restart + 容器ID
  • 然后出去访问自己的IP就能看到你刚刚在index.html的内容啦

Docker配置Nginx - 图1
**反向代理**

  1. upstream serves {
  2. server 192.168.10.121:8889;
  3. }
  4. server {
  5. ....
  6. location ~*^.+$ {
  7. proxy_pass http://serves; #请求转向serves 定义的服务器列表
  8. }
  9. }

**负载均衡**

  1. upstream serves {
  2. server 127.0.0.1:7878 weight=1; //weight配置权重 跟据配置的权重的大小而分发给不同服务器不同数量的请求。如果不设置,则默认为1。下面服务器的请求顺序为:ABBABBABBABBABB.
  3. server 192.168.10.121:666 weight=2;
  4. }
  5. server {
  6. ....
  7. location ~*^.+$ {
  8. proxy_pass http://serves; #请求转向serves 定义的服务器列表
  9. }
  10. }

热备\当某个服务器挂了、另外一个备用服务器将接管服务

  1. upstream serves {
  2. server 127.0.0.1:7878;
  3. server 192.168.10.121:6666 backup; #热备
  4. }

以上就是Nginx我在项目中所使用到的点、后期如果还有别的我会继续在上面进行补充