Eric Way's Personal Site

I Write $\sin(x)$ Not Tragedies

配置域名解析+用Nginx部署静态网站

2020-03-17 Coding

  1. 1. 域名解析
  2. 2. 安装Nginx
  3. 3. 防火墙设置
    1. 3.1. ufw
    2. 3.2. firewalld
  4. 4. 上传静态网站
  5. 5. Nginx 配置
  6. 6. 配置HTTPS连接(可选)
  7. 7. 结语

今天干完这活发现自己频频踩坑,心中愤懑难平,作文以记之。 ——题记

假如你有一个域名,有一个服务器,又刚刚做好了一个静态网站(或者用相应框架生成了一个)。那还有什么理由不把这网站发布给全世界呢?说到底,这就是互联网这一人类最伟大的发明最令人激动的部分。 本文首先介绍如何(在你的域名服务提供商那里)配置域名解析,然后介绍如何使用Nginx将你的网站部署到服务器上,最后还有配置HTTPS连接的简短介绍。 本教程使用腾讯云CentOS 7的服务器。操作时间请看博文发布时间。所有涉及域名的地方,皆假设你持有的域名是example.com,请自行修改为你自己的域名。

域名解析

当互联网用户输入你的域名,你的域名会被解析成你服务器的IP地址。要让这一过程发生,你需要进行适当的配置。 打开你的域名服务提供商的域名解析页面,你需要至少添加下面两条记录:

主机记录 记录类型 记录值 TTL(秒)
@ A 0.0.0.0 600
www A 0.0.0.0 600

记录的其他参数保持默认即可。注意其中0.0.0.0应该替换成你的服务器的IP地址。 假如你的域名是example.com,上面两条记录表示对example.com 以及www.example.com都解析到你的服务器的IP地址。 保存设置。 如果你需要进行邮箱解析或者其他操作,请查搜索引擎。

安装Nginx

在CentOS上,只需

1
sudo yum install nginx

即可完成安装。 启动Nginx:

1
sudo systemctl start nginx

要让Nginx自动启动,请用:

1
sudo systemctl enable nginx

查看状态:

1
sudo systemctl status nginx

以及还有stop等用法。

防火墙设置

有可能你的服务器上有防火墙服务在运行。常见的防火墙服务有ufw, firewalldiptables。请留意这三个服务在你的服务器上的运行状况。本文简要介绍前两个服务的必要配置。

ufw

查看状态:

1
ufw status

如果是不活跃的状态,可以忽略ufw这一节。 如果是运行中的状态,那么需要允许Nginx通过防火墙:

1
ufw allow 'Nginx Full'

如果没有报错,那就可以了。 如果报错,请查看可用的应用列表:

1
ufw app list

(正常情况下,如果正常安装了Nginx,这个列表中会有Nginx Full等应用。如果缺失,请自行查错。)

firewalld

查看状态:

1
firewall-cmd --state

如果在运行,查看开放的端口:

1
firewall-cmd --list-all

其中publicports一项表明开放的端口。确保80和443端口有开放。如果没有,自行添加:

1
2
firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --permanent --add-port=443/tcp

重启服务:

1
firewall-cmd --reload

其他操作,可参考此文(非官方文档,不保证准确性)。 附注: 如果你是刚刚才开始启用firewalld服务,那么你一定需要添加你的SSH服务端口,否则你将无法通过SSH远程连接到你的服务器。如果必要,同时需要添加其他服务所需的接口,例如mysqld。要查看所有端口使用情况,请用:

1
netstat -ltnp

添加新的端口后记得重启服务。

上传静态网站

可以利用git或者sftp等工具把你本地的静态网站上传到你的服务器。具体使用方法在此不作详细阐述。提示:在sftp中用put命令可以上传文件或目录(需要-r)。 上传后的静态网站一般放在/www/example.com/或者/var/www/example.com/目录下。当然,理论上来说,你放哪都行。下面本文假设放在/www/example.com/目录下。

Nginx 配置

你需要告诉Nginx加载你的网站。转到相关目录:

1
cd /etc/nginx

你可以在nginx.conf文件中直接修改,但这一般不太好。更好的风格是在当前目录的conf.d目录下新建一个.conf文件,文件名随意,只要能区分是你的网站即可。比如:

1
sudo vim example-com.conf

在文件中添加内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
server {
server_name example.com www.example.com;
root /www/example.com;
index index.html;

location / {
}

error_page 404 /404.html;
location = /40x.html {
}

error_page 500 502 503 504 /50x.html;
location = /50x.html {
}

注意把server_name后面改成你的域名,以及root后面改成你的静态网站存放的目录。 重启Nginx服务:

1
sudo nginx -s reload

然后访问http://example.com(当然改成你的域名),看看能否正常访问了。注意这里是http访问,而非https。 附注: 如果你的网站打开是Welcome to CentOS,而不是你自己的网站,那是因为Nginx加载了它的默认网站。如果是这样,那么你需要检查/etc/nginx/nginx.conf文件中的httpserver部分。那里一定设置了指向一个默认网站的配置。最简单的方法就是把相关设置改成你自己的网站。如果那样成功,你可以再相关的设置剪切出去,到conf.d目录下的一个.conf文件中(和上文说的一样)。 如果出现80端口冲突,也需要检查上面的默认网站设置。

配置HTTPS连接(可选)

我们用Let’s Encrypt的免费加密服务配置HTTPS的网站连接。 安装certbot-nginx

1
sudo yum install certbot-nginx

开始运行配置程序:

1
sudo certbot --nginx -d example.com -d www.example.com

然后根据屏幕上的提示来就可以了。具体配置的选择看个人需求及喜好。 注意这一步完成后,你的nginx的配置文件会被自动修改。

结语

本文可能出现叙述上或操作上的错误,如有发现,请联系作者。本文出现的一切用法都可能因为程序的更新而不再有效,因此只能提供主要的思路。如果遇到问题,请不要气馁,查阅相关资料解决。 如果一切进展顺利,那么你已经成功将你的网站发布在互联网上了。恭喜你。

This article was last updated on days ago, and the information described in the article may have changed.