自从建站开始一直想换一个固定连接,例如site26.cn/archive/202003/nginxTutorial 这种,中间几经周折,尝试过各种奇怪插件都无济于事。
寒假最后几天突发奇想看看nginx还是http的什么东西,结果是从底层的数字证书非对称加密看到https,又略研究了一下nginx的配置文件写法,突然开了窍。参考了一下这里的配置文件生成器提供的方案,我在近两天改造了本站连接系统。
建站之初大致是这样的。当时感觉直接把博客站点wordpress的所有文件都倒在nginx的webroot下很杂乱,并且如果后期有开辟此主机其他功能计划的话,这样做抹掉了所有可能的拓展性。实际上,同一服务器不同站点在nginx上是通过虚拟主机实现的,但当时我只是为了有个blog用的初学者(现在也是),完全无法理解nginx那些配置。
首先,借助nginx对配置文件的一些说明,正经的方案应该是这样的。
# 这是nginx.conf
# 一些全局配置,例如定义了nginx应该使用的用户
user www-datum;
pid /run/nginx.pid;
# events块,貌似与多线程处理的上限有关
events{
worker_connections 233;
}
# http块,配置文件的主要内容
http{
# 一些基础设置
ssl_protocols TLSv1;
access_log some-where-you-save-your-log.log;
# 这就是所说的虚拟主机块
server{
server_name blog.site26.cn;
root webroot/wordpress;
}
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
# 邮件服务器相关
mail{}
在sites-enable目录里直接写一个second文件
server{
server_name second.site26.cn;
root webroot/secondSite;
index index.php index.html;
# 等等
}
这样,在22行的include的作用下,相当于在nginx.conf中直接插入了second里的配置内容。
简而言之,只需要在sites-enabled下放入每个站点的配置文件(它们相互独立互不干扰),nginx就会自动加载相应的文件;而每个server块独立负责一个虚拟服务器的有关事宜。一个server块就被称为一个虚拟服务器(按本萌新的理解)。
在我最开始接触到的nginx.conf里自带了一个server{}或是根据傻瓜教程添加了一个server{},以为server{}中的root就是指整个nginx负责建站的根目录(我在想啥啊).结果就是我在webroot下放了一个从webroot/wordpress下找到的index.php,并把index.php里相关路径改成/wordpress下…大致这么个情况
因此,在访问blog.site26.cn时会正常加载一个主页(一个由webroot/index.php生成的主页),随便打开文章时访问的是blog.site26.cn/wordpress/文章id 而不是blog.site26.cn/文章id,这一个不寻常的应用方式就是导致所有后期更改固定链接失效之原因。 有一段时间我甚至以为是更改固定链接必须手动设置伪静态…
在局域网主机的nextcloud+https初步成功后,我试图给这个wordpress加https。根据推荐的配置文件和一些教程,我重写了nginx的配置文件,独立出一个wordpress.conf和一些安全相关的safety.conf或是php处理用php.conf,调整了wordpress本体对于站点链接/url的设定,并经历浏览器乱改http/https改用隐私模式 之后,现在本站链接系统已可正常工作。
印象中没有特别依赖某一个教程,所以就不放wordpress-nginx的相关教程上来了。不过,可以参考一下先前提到的配置文件生成器,结合原始nginx.conf比较来看也许会有一些收获。