Docker内Nginx配置多个静态网页项目

闲聊

这几天比较忙,都没注意看之前的链接已经失效,之前更换服务器,转移域名,目前主域名是:yanggenjie.cn;

还有在线文档预览不了的问题,主要是我把Nginx部署在Docker里面了,一个Nginx容器内,似乎只能开启80端口的server,开其它端口的server不生效,我的反向代理配置一直开着的,但就是访问不了,今天终于折腾出来。

之前的链接:https://selfteachingroad.cn/wiki/xxxx/,这个已经不能用了。

最新笔记链接:

链接可能会有访问不上的时候,但主域名是不会变的:yanggenjie.cn,之前的域名selfteachingroad.cn也能访问,只不过会重定向到yanggenjie.cn了。欢迎大家访问,不过目前基本没啥内容,正在构建内容

简介

建立一个网站都要申请域名,如果在国内服务器,都要进行备案,备案的流程有点麻烦,所以一般拿到一个域名之后,就用这个域名进行多个网站项目的部署。

比如我申请了yanggenjie.cn这个域名,访问这个域名是我的主站,但是有时候有些文档我也想部署在线访问,一般都不会再去申请一个域名了,直接在这个域名之后加上子目录,比如https://yanggenjie.cn/wiki/HintCAD/,这种访问,或者子域名,比如: https://wiki.yanggenjie.cn。这样,但子域名的操作也是需要自己添加解析,还要申请SSL证书,比如申请泛域名的SSL证书,才能用https访问,操作起来也比较麻烦。

二级目录的这种方式,只要主域名能正常访问,那只需要修改Nginx的配置,就能直接访问了。一般都不需要做过多的配置。

正文

接下来,就说一下我的Nginx如何配置的二级目录。

首先我的Nginx是跑在Docker容器内的。

我的Docker-Compose.yml内容如下:

version: "3.8"
services:
   web:
     container_name: nginx
     image: nginx
    # 这里我没有映射端口,我是用Nginx Proxy Manager进行反向代理访问这个的,当然这个是另外一个话题了
    # 自己部署的话,把Ports这个配置打开就行
    #  ports:
    #    - 80:80
    #    - 443:443
     volumes:
       - ./html:/usr/share/nginx/html
       - ./conf/nginx.conf:/etc/nginx/nginx.conf
       - ./conf.d:/etc/nginx/conf.d
       - ./logs:/var/log/nginx
     restart: always
     networks:
        default:
          ipv4_address: 172.32.0.2

networks:
  default:
    external: true
    name: web_net

html是网站根目录,html目录结构如下

|-- wiki
|   |-- HintCAD
|   `-- rstSyntax
`-- yanggenjie.cn
    |-- 404.html
    |-- about
    |-- assets
    |-- BIM\345\274\200\345\217\221
    |-- blog
    |-- index.html
    |-- python
    |-- search
    |-- sitemap.xml
    |-- sitemap.xml.gz
    |-- \345\215\232\345\256\242\346\212\200\346\234\257
    `-- \345\267\245\345\205\267

主站资源文件是放在yanggenjie.cn这个文件夹的,然后笔记文件单独放在wiki下的每个单独文件夹。

然后,Nginx配置内容如下:

server {
    listen 80;
    server_name localhost;
    #  强制https跳转
    # return 301 https://$server_name$request_uri;
    location / {
        root /usr/share/nginx/html/yanggenjie.cn;
        index index.html index.htm;
    }
    location /wiki/HintCAD {
        alias /usr/share/nginx/html/wiki/HintCAD/;
        index index.html;
    }
    location /wiki/rstSyntax {
        alias /usr/share/nginx/html/wiki/rstSyntax/
        index index.html;
    }
}

第一个location是指,当我访问:yanggenjie.cn,后面什么都不带的时候,就去访问html/yanggenjie.cn这个文件夹下的所有内容

    location / {
        root /usr/share/nginx/html/yanggenjie.cn;
        index index.html index.htm;
    }

第二个location就是二级目录的设置了,指的是,当我访问yanggenjie.cn/wiki/HintCAD/时,就会去访问/usr/share/nginx/html/wiki/HintCAD/下的资源。

    location /wiki/HintCAD/ {
        alias /usr/share/nginx/html/wiki/HintCAD/;
        index index.html;
    }

这样配置的话,就可以用二级目录来访问不同的资源了,

注意

注意,配置location时,链接代/和不带/,意义完全不一样。这里都要带上/才能正确访问。

这里有两个地方带斜杠和不带斜杠,一个是location外的路径,一个是location块内的alias路径

# 1.location后面的链接不带斜杠
# 访问的链接就可以写成:https://yanggenjie.cn/wiki/HintCAD
location /wiki/HintCAD {

}

# 2.location后面的链接带斜杠
# 访问链接的后面就必须带斜杠:https://yanggenjie.cn/wiki/HintCAD/,不带斜杠就访问不到
location /wiki/HintCAD/ {

}

# 3. location块内的内容中,alias路径不带斜杠
# 就说明当访问xx.cn/wiki/HintCAD这个路径时,实际会跳转到:alias+xx路径去找资源
# 即到服务器的/usr/share/nginx/html/wiki/HintCAD/wiki/HintCAD目录下寻找
# 这个路径一般都不是我们想要的
location /wiki/HintCAD {
    alias /usr/share/nginx/html/wiki/HintCAD;
    index index.html;
}

# 4.location块内,alisa带斜杠
# 就说明当访问xx.cn/wiki/HintCAD这个路径时,
# 会去服务器的/usr/share/nginx/html/wiki/HintCAD/目录下寻找资源
# 这个路径一般就是我们想要的
location /wiki/HintCAD {
    alias /usr/share/nginx/html/wiki/HintCAD/;
    index index.html;
}

# 这里应该是有个小坑,就是location的匹配链接是/wiki/HintCAD,
# 那么你alisa创建的目录最好也是要有wiki/HintCAD的目录结构
# 这个目录结构否则可能也会出现访问失效的情况

# 这个和1、2情进行组
# 这个表示,当访问https://yanggenjie.cn/wiki/HintCAD时,
# 会去服务器的/usr/share/nginx/html/wiki/HintCAD/wiki/HintCAD目录下寻找资源
# 注意我这里没有打错,就是有两个/wiki/HintCAD这个路径,第一个是alias路径,第二个是location块匹配的路径
location /wiki/HintCAD {
    alias /usr/share/nginx/html/wiki/HintCAD;
    index index.html;
}

# 这个访问https://yanggenjie.cn/wiki/HintCAD/时
# 资源同样是去服务器/usr/share/nginx/html/wiki/HintCAD/wiki/HintCAD目录下找资源
location /wiki/HintCAD/ {
    alias /usr/share/nginx/html/wiki/HintCAD;
    index index.html;
}

# 4. location块内的内容中,alias路径带斜杠
location /wiki/HintCAD {
    alias /usr/share/nginx/html/wiki/HintCAD/;
    index index.html;
}
# 这个表示访问https://yanggenjie.cn/wiki/HintCAD时,
# 会去服务器的/usr/share/nginx/html/wiki/HintCAD/目录下找资源。这个一般才是我们想要的效果

location /wiki/HintCAD/ {
    alias /usr/share/nginx/html/wiki/HintCAD/;
    index index.html;
}
# 这个表示访问https://yanggenjie.cn/wiki/HintCAD/时,(这个链接带有/)
# 会去服务器的/usr/share/nginx/html/wiki/HintCAD/目录下找资源。这个一般才是我们想要的效果

至此,按这种写法进行配置,一般就能正常访问了。