title: 服务器的各项配置 date: 2022-07-10 10:38:01 tags: 服务器
本文以华为的云服务器为例,各大服务器平台基本流程类似.本文默认已经购买了一台服务器,并且完成了基本的操作系统搭建,具体可以参考本系列之前的两篇文章
如果你对服务器的基本端口/域名/端口号尚且不清楚,可以先阅读这篇科普文章,IP,域名和端口号之间的联系,我觉得说的还是清晰的
我们现在来运行一个服务吧,在/home/目录下新建一个project文件夹,新建 server.js
文件并写入以下代码创建一个简单的nodejs的HTTP服务
const http = require('http');
const server = http.createServer((req, res) => {
console.log("receive one connect");
res.end('hello world')
});
server.listen(9000, () => {
console.log("start server")
});
启动服务
node server.js
接着打开浏览器,输入 IP:9000
看一看吧
什么也没有? 这很正常,虽然服务在9000端口启动了,但是你访问不了,只有服务器本机可以访问. 那么外界如何访问这个服务呢,你需要手动开启这个服务
需要添加入方向规则和出方向规则,注意出入两条规则都需要添加,不然还是无法访问
我们开放9000端口,然后再次访问 IP:9000
很好,一个简单的hello world界面,并且在终端里也输出了receive one connect
但是你会发现终端被占用了,一旦你关闭了终端或者使用ctrl+c结束进程就再也无法访问了,我们总不可能持续的开启这个终端不关闭吧,我们还要做别的事情啊,我的电脑不可能像服务器一样一直不关机啊,所以我们需要把这个服务挂在后台
nohup node server.js &
nohup 就是不挂起的命令, &代表运行在后台,我们也可以选择输出文件的名字,默认是nohup.txt,参考
现在我们可以在终端继续别的事情了,这个服务也会一直启动着不结束.你什么时候想访问都可以
如果想要结束这个服务怎么办呢? 可以使用命令查看所有进程
ps -ef
浏览一下所有进程,哦找了,node server.js, pid号是7964(这个自己看一下,每次都不一样,别杀错了)
也可以使用
ps -ef | grep server.js
更加精确的搜索
kill 7964
这样这个进程就结束了,但是这种方法稍微有点笨. 毕竟还要手动找一下,我这里推荐两个可以帮助我们在后台使用服务的,pm2和forever,我个人推荐使用pm2,命令行的输出做的更加美观一些~
安装
npm install -g pm2
pm2 start server.js // 启动
pm2 stop server.js // 停止
pm2 restart server.js // 重启
查看所有运行后台服务
pm2 list
pm2 flush // 清除日志
也可以直接查看log日志
pm2 log // 查看所有运行后台服务
pm2 log 0 // 单独查看某一个的日志
可以直接通过id关闭服务
pm2 stop 0
forever的命令完全相同,把pm2换成forever就行了,使用起来差不多
现在我们可以启动一个服务了,但是似乎我们的访问方式有点老土,直接访问ip:端口号有点不专业,不好记也不方便.
正常都是直接访问一个网址的,这就需要域名的出场了.我们需要购买一个域名
这里推荐一个视频,对域名的讲解很全面,顶级域/一级二级域名都说的不错,这个视频系列也是很通俗易懂的理解服务的相关知识,建议看一下
华为云-域名注册,你可以在这里购买一个域名,可以选xyz top
这样的顶级域,比较便宜
域名购买完成了之后不是直接就可以和服务器绑定使用的,在中国还需要进行IPC备案,各大云服务器厂商也都提供了备案方式,在哪里购买的域名就在哪里备案就可以,省得麻烦.
备案步骤比较繁琐,先有平台审核,然后管局审核,我的域名kamilu.top
就是大约10多天才备案通过,不同地区的管局处理速度不同,一般都是十天左右
备案完成之后我们就可以进行域名的DNS解析了,华为云的解析文档说的很详细了,我就不再赘述
将域名映射到服务器之后,你就可以通过域名来替换你的IP地址了,这样刚才的服务就可以通过 域名:9000
来访问了
如果网站访问不了,也可以通过网站无法访问怎么办这篇文章来排查问题
C:\Windows\System32\drivers\etc -> HOST文件
我们现在的连接是HTTP连接,我们最好使用HTTPS的连接,有了SSL的服务更加安全.
可以在华为云 HTTPS证书申请申请一个证书,很快也不复杂
个人用户没必要购买,可以直接使用免费的证书
购买之后会指引如何进行DNS解析,在SSL证书管理可以看到进度
DNS解析就是加一个_dnsauth的域名,选择TXT,输入值,这个也都有文档很详细的说明
对于二级域名同理,域名选择你的二级域名就可以了
不要忘记开启SSL服务哦,云服务器端口哪里的安全组可以快速添加,很方便
那么我们接下来把证书的部署和端口一起处理一下,平时似乎也没见过谁访问一个网址还要单独带一个端口号,最好我们直接就是输入一个网址就可以访问服务了,这里用到nginx的反向代理服务,可以把你的网址的访问映射到端口号的服务上
安装
sudo apt install nginx
后面的都需要root了, 启动Nginx服务
systemctl start nginx
安装之后你可以查看你的nginx的配置文件的位置
nginx -t
显示配置文件在/etc/nginx/nginx.conf,打开这个文件,然后配置你的服务
官网的nginx和我的不太一样,我看好多都是直接编译nginx的,我是一键下载,不过没啥大差别
下载你的证书,然后你可以看到一个nginx的子文件夹,里面有两个文件(crt | key)
在/etc/nginx/ 下新建一个cert文件夹用于保存证书文件,然后将nginx的两个证书ftp传入这个目录
关于conf的配置文件主要如下,http请求转换成https请求, 对于443端口(HTTPS默认是443端口请求)映射到location的位置,默认index.html文件
我给出我的配置文件
这里解释一下我的配置,kamilu.top
是我的一级域名也就是我购买的,访问这个域名会被跳转到/home/cloud-server
这个目录下的index.html
文件,也就是我的主页. ssl_certificate和ssl_certificate_key就是证书的名字,改成你的
注意这里不要放在一个用户下面, css的显示会有问题
除此之外可以再申请一个HTTPS证书用于二级域名,二级域名不需要买,买了一级域名就可以使用旗下的所有二级域名,但是因为我们的HTTPS证书是免费的,所以所有的二级域名还是需要重新申请证书的,如果是泛域名的证书那么 *.kamilu.top
的二级域名都可以直接使用,不过那就要花钱了,也没必要
visual.kamilu.top
是我的申请的一个二级域名,它会被映射到我的3000端口的服务,也就是说访问https://visual.kamilu.top
就相当于访问 https://kamilu.top:3000
内容加在http {} 大括号中间的位置就可以
events {
worker_connections 1024; ## Default: 1024
}
http {
server { # 自动跳转到https
listen 80;
server_name kamilu.top;
#将请求转成https
rewrite ^(.*)$ https://$host$1 permanent;
}
server {
listen 443 ssl; #配置HTTPS的默认访问端口为443。如果在此处未配置HTTPS的默认访问端口,可能会导致Nginx无法启动。
server_name kamilu.top; #修改为您证书绑定的域名。
ssl_certificate cert/scs1657261851237_kamilu.top_server.crt; #替换成您的证书文件的路径。
ssl_certificate_key cert/scs1657261851237_kamilu.top_server.key; #替换成您的私钥文件的路径。
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5; #加密套件。
ssl_prefer_server_ciphers on;
location / {
root /home/cloud-server; #站点目录。
index index.html; #添加属性。
}
}
server {
listen 443 ssl;
server_name visual.kamilu.top;
ssl_certificate cert/scs1657282492078_visual.kamilu.top_server.crt;
ssl_certificate_key cert/scs1657282492078_visual.kamilu.top_server.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://localhost:3000/;
}
# modify the maximum file upload size
client_max_body_size 2000m; # 如果有文件上传和下载功能需要注意修改为合适的值,默认为 1m
}
}
修改完成之后你可以使用nginx -t
查看一下有没有配置文件错误,如果ok,successful的话重启一下nginx服务
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
systemctl reload nginx
稍微等待一会儿,然后访问你的域名,不加任何端口号就可以看到主页了(如果你的这个目录下有东西的话),访问二级域名也可以看到了
注意要使用https访问
adduser kamilu
将kamilu添加到sudo组:
usermod -aG sudo kamilu
sudo whoami