完善的域名解析姿势

平时专职搞开发,基本不动服务器的东西,如今自己要搞个网站,就自己摸索了一下Nginx的配置。

场景

我有一台服务器,需要搭建两个网站并解析域名,都使用80端口,而且在加上https。

那么这种情况下,nginx应该如何配置呢?

具体配置文件

网站A

default.conf

1
2
3
4
5
6
7
8
9
10
11
12
server {
listen 8080;
server_name localhost;

access_log /var/log/nginx/host.access.log main;
error_log /var/log/nginx/host.error.log error;

location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
}

我只放出了关键配置,说明问题即可。网站B其实和这个也是一样的,根据需求配置即可,并选择另外一个端口号,如8081。

反向代理nginx配置

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
server {
listen 443 ssl http2;
server_name www.your-domain-name.com;
#charset utf-8;
access_log /var/log/nginx/your-domain-name.com/access.log main;
error_log /var/log/nginx/your-domain-name.com/error.log error;

ssl_certificate conf.d/1_www.your-domain-name.com_bundle.crt;
ssl_certificate_key conf.d/2_www.your-domain-name.com.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
location / {
proxy_http_version 1.1;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $http_host;
proxy_set_header Connection "";
#proxy_http_version 2.0;

proxy_pass http://official_site:8080;
}
}
server {
listen 443 ssl http2;
server_name your-domain-name.com;
#ssl_certificate conf.d/1_your-domain-name.com_bundle.crt;
#ssl_certificate_key conf.d/2_your-domain-name.com.key;
#ssl_session_timeout 5m;
#ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
#ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
#ssl_prefer_server_ciphers on;
rewrite ^(.*) https://www.your-domain-name.com$1 permanent;
}
server {
listen 80 http2;
server_name www.your-domain-name.com your-domain-name.com;
rewrite ^(.*) https://www.your-domain-name.com$1 permanent;
}

关键点说明

  • 第2行 我配置了http2.0的协议,如果1.1版本的话改成http即可
  • 第3行 server_name 就是写你要解析的域名
  • 第8和第9行的路径:我的当前配置文件和.crt .key文件是放在同一个文件夹conf.d/下面的,完整路径/home/reverse_proxy/etc/nginx/conf.d,仅供参考,具体放哪自行决定。只要配置对了就行,出错记得看nginx的error.log。
  • 第14行 开始 到第23行就是要转发到的目标配置了,只说明一下第22行,proxy_pass 就是写具体的网站根url,因为我用的docker取名为official_site所以配置是这样的,如果不用docker的话可以写http://IP:PORT
  • 第25到35行是把二级域名your-domain-name.com的https请求301跳转到三级域名https://www.your-domain-name.com
  • 第36行到40行是把二级域名和三级域名的http请求都永久跳转到https://www.your-domain-name.com

配置形成的效果

  • 网站就只能通过https来访问
  • 二级域名和三级域名都解析,迎合了不同的用户输入域名的习惯
  • 把二级域名301跳转到三级域名,这样对SEO友好。
  • 有新域名需要解析到这台服务器的话,照葫芦画瓢配置响应的server就行。

以上就是自建网站配置nginx需要注意的小技巧,初期嘛,低成本运作就行。

加载评论框需要科学上网