完善的域名解析姿势
          
          平时专职搞开发,基本不动服务器的东西,如今自己要搞个网站,就自己摸索了一下Nginx的配置。
场景
我有一台服务器,需要搭建两个网站并解析域名,都使用80端口,而且在加上https。
那么这种情况下,nginx应该如何配置呢?
具体配置文件
网站A
default.conf
| 12
 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配置
| 12
 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需要注意的小技巧,初期嘛,低成本运作就行。