写在前面
- 假设你已经成功配置并运行好了 Halo,且不是使用 80 端口运行。
- 有一个可用的域名,并且已经备案了。(如果没有域名,可以去阿里云上购买)
- 请确保域名已经成功解析到服务器的 IP,并确认服务器是否需要备案。
- 请检查服务器的 80 和 443 端口是否开放。
- 如果想要博客支持 https 连接,则必须需要一个有效的 SSL 证书。(SSL 证书也可以去阿里云购买)
> 提示:
> 现在大多数网站都支持 https 连接,而且 chrome 浏览器要求网站必须提供 https 连接,否则会提示警告(此网站不安全),所以说以后网站支持 https 连接是必不可少的。
安装 Nginx
代码语言:javascript复制# 添加 Nginx 源
sudo rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
# 安装 Nginx
sudo yum install -y nginx
# 启动 Nginx
sudo systemctl start nginx.service
# 设置开机自动启动 Nginx
sudo systemctl enable nginx.service
配置 Nginx
代码语言:javascript复制# 下载 Halo 官方的 Nginx 配置模板
curl -o /etc/nginx/conf.d/halo.conf --create-dirs https://dl.halo.run/config/nginx.conf
下载完成之后,我们还需要使用 vim
命令对其进行修改:
# 使用 vim 编辑 halo.conf
vim /etc/nginx/conf.d/halo.conf
打开之后,我们可以看到如下信息:
代码语言:javascript复制server {
listen 80;
server_name example.com www.example.com;
location / {
proxy_set_header HOST $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:8090/;
}
}
> 注意:请把 example.com 改为自己的域名。
修改完成之后,我们需要重新加载 Nginx 配置文件,如:
代码语言:javascript复制# 检查配置是否有误
sudo nginx -t
# 重载加载 Nginx 配置文件
sudo nginx -s reload
配置 SSL 证书
> 首先,您需要有一个有效的 SSL 证书,如果没有,可以去阿里云申请购买。
> SSL 证书申请好后,点击下载证书,就可以得到一个密钥,我们需要将密钥拷贝至服务器。
使用 vim
命令打开 nginx.conf
配置文件,如:
# 使用 vim 编辑 nginx.conf
vim /etc/nginx/nginx.conf
打开之后,在 nginx.conf
配置文件中的最后一行,加上如下配置:
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
# 最后一行加上
include /etc/nginx/conf.d/*.conf;
}
使用 vim
命令,打开 halo.conf
配置文件,如:
# 使用 vim 编辑 halo.conf
vim /etc/nginx/conf.d/halo.conf
打开之后,我们会看到如下信息,并对其进行修改,如:
代码语言:javascript复制## 将所有的 http 请求,转发到 https
server {
listen 80;
server_name pengzhenjin.top www.pengzhenjin.top;
rewrite ^(.*)$ https://$host$1 permanent; # 将所有 http 请求通过 rewrite 重定向到 https
# client_max_body_size 1024m;
#
# location / {
# proxy_set_header HOST $host;
# proxy_set_header X-Forwarded-Proto $scheme;
# proxy_set_header X-Real-IP $remote_addr;
# proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#
#
# proxy_pass http://127.0.0.1:8090;
# }
}
## 配置 pengzhenjin.top 的 ssl
server {
listen 443 ssl;
server_name pengzhenjin.top;
ssl_certificate /etc/nginx/cert/pengzhenjin.top.pem;
ssl_certificate_key /etc/nginx/cert/pengzhenjin.top.key;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
location / {
proxy_set_header HOST $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:8090;
}
}
## 配置 www.pengzhenjin.top 的 ssl
server {
listen 443 ssl;
server_name www.pengzhenjin.top;
ssl_certificate /etc/nginx/cert/pengzhenjin.top.pem;
ssl_certificate_key /etc/nginx/cert/pengzhenjin.top.key;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
location / {
proxy_set_header HOST $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:8090;
}
}
说明:
上面的配置中,我们会看到有三个 server,其中,第一个 server,是配置将所有 http 请求,转发到 https;第二个 server 和 第三个 server,是配置域名网址 与 SSL 证书进行关联。(由于阿里云上申请的免费证书不支持域名通配符,只能一个域名对应一个证书,因此配置了两个仅证书不一样的 server)
最后
到这里,关于 Nginx 的配置也就完成了,现在你可以访问一下自己的域名,并进行 Halo 的初始化了。
> 提示:
在设置了 Nginx 反向代理之后,请一定记得去 Halo 的后台管理系统设置一下正确的博客地址,否则可能会造成资源获取不成功。