由于主流Web服务器Apache、Nginx和Caddy中,本人对于Nginx比较擅长,因此本人将主要基于Nginx进行介绍。同时Linux各种发行版中,本人对于ArchLinux和Debian比较擅长且Debian在服务器领域市占率明显高于ArchLinux,服务器将基于Debian进行介绍。
公网服务器
首先我们需要一台公网服务器,什么是公网服务器呢?公网服务器就是有公网ip的24小时不关机的电脑。
我们上网的过程和我们线下聊天的过程是一样的:
上网 | 线下聊天 |
在浏览器输入网址 | 在约定的地点喊自己好朋友的名字并问问题 |
浏览器渲染网页 | 好朋友把答案告诉了我们 |
以上的类比是极其极其简化的,只是为了便于理解,实际上网过程复杂许多,我们可以后续再写一篇文章为大家介绍。
公网IP
IP在该方面可以分为公网IP和内网IP,我们可以将整个互联网想象成一个巨大的小区,然后就有下面这段对话:
老王和小明都是这个小区的业主。 老王:“小明你家住哪里呀?” 小明:“我家住802!”
小明此时的回答就是内网IP,老王如果和小明住同一栋楼是可以找到小明的,但是如果不是同一栋楼就找不到了,那就需要以下的对话:
老王和小明都是这个小区的业主。 老王:“小明你家住哪里呀?” 小明:“我家住9号楼802!”
小明此时的回答就是公网IP,不管老王和小明是不是同一栋楼,老王都是可以找到小明的。
以上只是一个例子辅助理解两种IP在功能上的差异,实际上并不像例子中讲的那样。公网IP不等于内容更加翔实的内网IP。
而实际上,内网IP有自己的一套标准,感兴趣的可以自己查查,我们这里就不再继续深入了。
购买公网服务器
此处没有广告,就随便选一个主流的有名的就行,可以去网上搜搜有没有什么活动,学生的话会有学生套餐。
一般购买时或购买后可以选择操作系统,我由于上面已经说明,使用Debian介绍,那在这里选择Debian,如果没有Debian选择Ubuntu也可。
连接服务器
一般购买后会给你一个地址和密码,也可能有用户名。
如果只有地址和密码,那用户名应该是root;如果都有……那就都有吧!
去下载一个SSH软件,连接服务器,我个人使用WindTerm,觉得挺好用的。
WindTerm在“会话”框下面右键,点击“新建会话”
然后我们双击刚刚新建好的会话,不出意外的话,恭喜你!我们就连上啦!
配置服务器
安装Nginx
Nginx是一个Web服务软件,可以理解为是“电子书管理员”。
电子管理员 | Nginx |
被请找书 | 被问网址 |
会去找书 | 会读取本地文件 |
把书复制一份给顾客 | 把文件内容发给用户 |
在Debian上,安装Nginx的命令如下:
sudo apt install nginx
这个命令在这里就不解释了,后续我们将在涉及到Linux的文章里介绍。
如果没啥报错就按照好了,然后我们可以启动Nginx并设置开机自启:
sudo systemctl enable nginx --now
这个时候访问一下http://ip
应该已经可以看到Nginx的欢迎页了
配置Nginx
Nginx是使用配置文件进行控制的,一般放在/etc/nginx
这个目录下,我们切换到这个目录(自行将下面代码中的注释删除)
cd /etc/nginx # 进入目录
ls # 列出该目录里的文件
大概应该是这样的,内容应该大差不差
有可能没有site-xxxxx
的文件夹而是conf.d
这个文件夹,这个不用担心,conf.d
=site-enable+site-available
,我这里就按我的文件夹方式来和大家介绍。
这里面最主要的、我们会改的几个文件(夹):nginx.conf
、site-enable
和site-available
先来看看我的nginx.conf
:
user http http;
worker_processes 1;
#load_module /usr/lib/nginx/modules/ngx_http_dav_ext_module.so;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
error_log /var/log/nginx/error.log;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
include site-enable/*.conf;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
types_hash_max_size 2048;
types_hash_bucket_size 128;
#keepalive_timeout 0;
keepalive_timeout 65;
gzip on;
gzip_vary on;
#server {
#listen 80;
#server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
#location / {
# root /usr/share/nginx/html;
# index index.html index.htm;
#}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
#error_page 500 502 503 504 /50x.html;
#location = /50x.html {
# root /usr/share/nginx/html;
#}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
#}
# another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
# listen 8000;
# listen somename:8080;
# server_name somename alias another.alias;
# location / {
# root html;
# index index.html index.htm;
# }
#}
# HTTPS server
#
#server {
# listen 443 ssl;
# server_name localhost;
# ssl_certificate cert.pem;
# ssl_certificate_key cert.key;
# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 5m;
# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;
# location / {
# root html;
# index index.html index.htm;
# }
#}
include /etc/nginx/sites-enabled/*;
}