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

闲聊

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

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

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

最新笔记链接:

  • 纬地笔记链接:https://yanggenjie.cn/wiki/HintCAD

  • rst语法笔记链接:https://yanggenjie.cn/wiki/rstSyntax

链接可能会有访问不上的时候,但主域名是不会变的: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/目录下找资源。这个一般才是我们想要的效果

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

原创文章,作者:网络技术联盟站,如若转载,请注明出处:https://www.sudun.com/ask/49792.html

(0)
网络技术联盟站's avatar网络技术联盟站
上一篇 2024年5月11日 下午1:51
下一篇 2024年5月11日 下午1:53

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注