环境准备
站点服务器:Debian 11
个人PC:Vscode , nodejs , git , xshell远程工具
这里的站点服务器可以是云服务器,也可以实体机子,我这里使用家里的NAS-unraid开了一台Debian11虚拟机,虚拟机用任意linux发行最新版本均可。
因为某些原因需要去熟悉Debian,发现在Debian系统上编辑文档有点困难 Debian系统vi把我方向键吃了q.q,还是习惯redhat,nas虽然能vnc但是总是不稳定,所以unraid设置虚拟机网络桥接后,直接用远程工具+本地文档编写+git版本管理同步进行搭建。
搭建开始
初步想法就是,基于hexo用静态页面做个人博客站点,hexo有些主题挺贴我的喜好。
快速搭建hexo站点
远程到Debian后,安装git,nodejs,然后使用npm安装hexo,这里选择全局安装,方便调试
$ npm install -g hexo-cli
创建一个站点目录,进行初始化
$ mkdir -p /home/hexo
$ hexo init /home/hexo/demo
$ cd /home/hexo/demo
$ npm install
在站点的根目录下配置站点的基本信息,一般只要去编辑# Site
和# URL
两个部分,其他部分保持默认即可
$ vi /home/hexo/demo/_config.yml
配置好_config.yml
文件后,直接启动hexo服务把站点启动,记得目录保持在hexo初始化的根目录。
$ hexo server
#INFO Validating config
#INFO Start processing
#INFO Hexo is running at http://localhost:4000/ . Press Ctrl+C to stop.
当无ERROR日志则说明顺利启动,并且默认监听在4000端口上,直接访问该页面,站点将按官方默认主题启动,不过讲真默认主题已经蛮好看的了。
Ngnix配置HTTPS
不难发现,虽然站点起来了,但是发现只能用http访问,使用https却访问不了。
经过一段时间的百度,考虑采用ngnix做代理转发,将http转成https。首先需要先安装ngnix,apt安装理论上是可行的,因为本地编译安装没尝试过,找了个帖子跟着做试试。
先下载ngnix最新源文件包,apt安装必要的编译工具。
$ apt install -y build-essential libpcre3 libpcre3-dev openssl zlib1g-dev libssl-dev
# 下载源码
$ wget http://nginx.org/download/nginx-1.20.2.tar.gz
# 解压并准备编译
$ tar -xf nginx-1.20.2.tar.gz
$ cd nginx-1.20.2
# 参考帖子的编译参数脚本,其中:
#--prefix:Nginx主要安装路径,后续Nginx子目录依照这个变量展开
#--user:设置Nginx进程启动时,所属的用户
#--group:设置Nginx进程启动时,所属的用户组
$ ./configure \
--prefix=/usr/local/nginx \
--user=www \
--group=www \
--sbin-path=/usr/local/nginx/sbin/nginx \
--conf-path=/usr/local/nginx/nginx.conf \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--pid-path=/var/run/nginx.pid \
--lock-path=/var/run/nginx.lock \
--http-client-body-temp-path=/var/cache/nginx/client_temp \
--http-proxy-temp-path=/var/cache/nginx/proxy_temp \
--http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp \
--http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp \
--http-scgi-temp-path=/var/cache/nginx/scgi_temp \
--with-file-aio \
--with-threads \
--with-http_addition_module \
--with-http_auth_request_module \
--with-http_dav_module \
--with-http_flv_module \
--with-http_gunzip_module \
--with-http_gzip_static_module \
--with-http_mp4_module \
--with-http_random_index_module \
--with-http_realip_module \
--with-http_secure_link_module \
--with-http_slice_module \
--with-http_ssl_module \
--with-http_stub_status_module \
--with-http_sub_module \
--with-http_v2_module \
--with-mail \
--with-mail_ssl_module \
--with-stream \
--with-stream_realip_module \
--with-stream_ssl_module \
--with-stream_ssl_preread_module
输入配置命令后,如果按如下提示说明无误,可以进行编译
Configuration summary
+ using threads
+ using system PCRE library
+ using system OpenSSL library
+ using system zlib library
nginx path prefix: "/usr/local/nginx"
nginx binary file: "/usr/local/nginx/sbin/nginx"
nginx modules path: "/usr/local/nginx/modules"
nginx configuration prefix: "/usr/local/nginx"
nginx configuration file: "/usr/local/nginx/nginx.conf"
nginx pid file: "/var/run/nginx.pid"
nginx error log file: "/var/log/nginx/error.log"
nginx http access log file: "/var/log/nginx/access.log"
nginx http client request body temporary files: "/var/cache/nginx/client_temp"
nginx http proxy temporary files: "/var/cache/nginx/proxy_temp"
nginx http fastcgi temporary files: "/var/cache/nginx/fastcgi_temp"
nginx http uwsgi temporary files: "/var/cache/nginx/uwsgi_temp"
nginx http scgi temporary files: "/var/cache/nginx/scgi_temp"
$ make
编译顺利直接安装,然后创建systemctl守护服务
$ make install
$ vi /usr/lib/systemd/system/nginx.service
按如下内容填写
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s quit
PrivateTmp=true
[Install]
WantedBy=multi-user.target
这样一来,那么ngnix服务就已经安装好了,需要注意如下信息
/usr/local/nginx:为Nginx编译安装的地址。
/usr/local/nginx/nginx.conf:Nginx默认配置文件。
使用systemctl对Nginx进行管理:
启动Nginx服务:systemctl start nginx
。
重载Nginx配置:systemctl reload nginx
。
停止Nginx服务:systemctl stop nginx
。
与systemctl相关的拓展可参考这篇教程:《Linux系统服务神器:systemctl的配置与使用》
接着开始编写配置文件vi /usr/local/nginx/nginx.conf
,前面部分内容不需要修改,主要将配置文件最后关于https的部分取消注释并按如下内容填写
# http 80端口可以直接注释掉,本项目暂时用不到
# 注意缩进格式
# HTTPS server
#
server {
listen 443 ssl;
# 可填写域名或者ip地址
server_name xxx.xxx.xxx.xxx;
# ssl文件目录,图方便直接丢/etc/nginx目录
ssl_certificate /etc/nginx/server.crt;
ssl_certificate_key /etc/nginx/server.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
# 这里为站点的资源目录,hexo静态文件存放在hexo项目根目录xxx/public中
root /xxx/xxx/public;
# 这里填写根目录,如果hexo上没有设置子目录就按默认填写/即可,如果有设置就填写/子目录名/,proxy_pass位置同理
location / {
index index.html index.htm;
proxy_pass http://xxx.xxx.xxx.xxx:4000/;
}
}
刚刚配置文件中我们填写了ssl文件,直接重载nginx配置会直接报错,我们需要先准备ssl文件并放到配置的目录中。
正常站点是需要进行站点备案、申请域名,然后再填写信息去申请ssl证书。
考虑到目前搭建的只是局域网内使用的,不对外开放,也没有申请域名,直接使用自签SSL证书
ps:虽然对外访问的站点也可以使用自签证书,但因为自签证书安全性不高不推荐使用,仅限调试测试使用。
生成rsa私钥,使用des3算法,2048位,私钥文件保存为server.key
$ openssl genrsa -des3 -out server.key 2048
接下来生成CSR(证书签名请求),执行该语句后会要求依次输入国家,地区,城市,组织,组织单位,Common Name和Email等信息反正是假的,无脑回车按默认值就行
$ openssl req -new -key server.key -out server.csr
最后生成自签名证书,输出自签证书server.crt
$ openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
将两个文件放到配置文件填写的目录,重载ngnix配置文件
$ systemctl reload ngnix
然后直接访问https://站点/
,除了浏览器会提示告警外,已经可以使用https进行访问了。
References:
- ngnix安装
Debian上编译安装Nginx:https://www.gxlsystem.com/yunwei-33237.html
debian11编译安装nginx最新稳定版1.22.1https://www.rezhuji.com/os/debian11/build/how_to_make_install_nginx_on_debian11.html
Debian apt安装nginx并配置反向代理:https://pangruitao.com/post/2106 - 反向代理与延伸
Nginx通过location反向代理网站找不到CSS,JS及图片问题解决方案:https://blog.csdn.net/chengliang666/article/details/126230750
nginx 配置多个server与多个location:https://blog.csdn.net/GDKbb/article/details/124398453
Nginx常见场景代理转发配置:https://blog.csdn.net/faye0412/article/details/75200607/ - hexo站点搭建
Hexo官方文档:https://hexo.io/zh-cn/docs/
Hexo-Redefine主题文档:https://redefine-docs.ohevan.com/docs/intro
Hexo添加分类及标签:https://juejin.cn/post/6844903830216261645
Redefine作者站点搭建分享:https://ohevan.com/vercel-hexo-configuration.html