使用的服务

  • 域名:阿里云
  • 服务器:腾讯云
  • SSL 证书:腾讯云

Nginx 子域名配置

域名介绍

  • 顶级域名,又称一级域名,比如 .com .org .cn
  • 二级域名,就是在一级域名前再加一级,比如 muycode.com
  • 二级域名以上级别的域名,统称为子域名,比如 book.muycode.com

多说一句:有人认为 xxx.com 是一级域名,虽然是错误的,但可以理解。对于购买或使用者来说 xxx.com 就相当一级域名,但是从真正的域名分级看,属于二级域名

Nginx 子域名配置

我们在部署项目时,通常会希望使用 book.muycode.comblog.muycode.com 类似的子域名。
刚开始可能会想到使用不同的端口来区分,但是,在解析域名时,是不能通过 IP:port 的方式来配置的,如下图:

所以,我们都可以使用 80 端口配置,在配置时,使用子域名即可。
安装 Nginx 可参考 CentOS7 环境配置(持续更新) 文章。

nginx.conf 配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#user  nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
pid /run/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
fastcgi_buffers 8 128k;
send_timeout 60;
keepalive_timeout 100;
types_hash_max_size 4096;
client_header_timeout 180s;
client_body_timeout 180s;
client_max_body_size 200M;
client_body_buffer_size 256k;
#gzip on;

upstream test-server {
server localhost:8081;
}
server {
listen 80;
server_name test.muycode.com;
# 前端静态页面
location / {
root /home/opt/test;
index index.html index.htm;
}
# 配置多个静态资源
location /test2 {
# 不能使用 root,需要使用 alias
alias /home/opt/test2;
index index.html index.php index.htm;
}
# 后端服务
location /test-server/ {
root html;
index index.html index.htm;
proxy_pass http://test-server;
proxy_set_header x-forwarded-for $remote_addr;
}
}
server {
listen 80;
server_name muycode.com;
location / {
root /home/opt/blog;
index index.html index.htm;
}
}
server {
listen 80;
server_name book.muycode.com;
# book
location / {
root /home/opt/book;
index index.html index.htm;
}
}
}

重启 Nginx,systemctl start nginx

域名解析

在配置好 Nginx 之后,再解析域名,只需填写子域名记录值和 IP 地址即可

解析大概需要几分钟的延迟,然后再打开 http://book.muycode.com/ 即可访问。

配置 HTTPS

申请 SSL 证书

可以申请到免费 SSL 证书,这类证书,签发有效期为 1 年,并且都是单域名。阿里云为自然年,不是从签发日起的一年。
由于阿里云的免费签名已申请过,所以本次介绍都是以腾讯云为基础。

当申请完 腾讯云 SSL 证书 之后,通过 控制台,可以看到已申请的证书信息。

安装证书

通过右边 下载证书 按钮,把证书下载到本地,解压之后,可以看到在 Nginx 文件夹中,有两个文件

  • 1_muycode.com_bundle.crt
  • 2_muycode.com.key

把这两个文件上传到服务器 /etc/nginx/conf(nginx 安装目录),然后修改nginx.conf,由于是申请的免费单域名(包含一个子域名),所以打算把证书配置在muycode.com 域名上。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#user  nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
pid /run/nginx.pid;
events {
worker_connections 1024;
}

http {
include mime.types;
default_type application/octet-stream;

sendfile on;
tcp_nopush on;
tcp_nodelay on;
fastcgi_buffers 8 128k;
send_timeout 60;
keepalive_timeout 100;
types_hash_max_size 4096;
client_header_timeout 180s;
client_body_timeout 180s;
client_max_body_size 200M;
client_body_buffer_size 256k;
#gzip on;

upstream test-server {
server localhost:8081;
}
server {
listen 80;
server_name test.muycode.com;
# 前端静态页面
location / {
root /home/opt/test;
index index.html index.htm;
}
# 配置多个静态资源
location /test2 {
# 不能使用 root,需要使用 alias
alias /home/opt/test2;
index index.html index.php index.htm;
}
# 后端服务
location /test-server/ {
root html;
index index.html index.htm;
proxy_pass http://test-server;
proxy_set_header x-forwarded-for $remote_addr;
}
}
# 修改此处
server {
listen 80;
server_name muycode.com;
// 使用 rewrite 指令,使 http 跳转到 https
return 301 https://muycode.com;
#location / {
# root /home/opt/blog;
# index index.html index.htm;
#}
}
server {
listen 80;
server_name book.muycode.com;
# book
location / {
root /home/opt/book;
index index.html index.htm;
}
}

# 添加配置
# HTTPS server
server {
listen 443 ssl;
server_name muycode.com;
ssl_certificate conf/1_muycode.com_bundle.crt;
ssl_certificate_key conf/2_muycode.com.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
location / {
root /home/opt/blog;
index index.html index.htm;
}
}
}

重启 Nginx,systemctl start nginx

验证 SSL

访问 http://muycode.com,会跳转到 https://muycode.com
但是,当访问 http://www.muycode.com 时,还是不会变化。不过可以通过域名解析,使用 显性 URL 来做重定向。

至此,Nginx 和 SSL 配置都已完成!