有的云服务商会销售NAT机,网络上关于NAT机的文章,要么教唆你拿NAT机做一些要进局子的事,要么就是长篇累牍地复读常规主机的知识。
首先,NAT机和常规服务器有什么区别?
最大的区别就是网络访问的方式,NAT(网络地址转换)顾名思义,你不能直接通过公网ip访问这个主机,需要通过端口转发来访问这个设备。
比如要访问22端口的SSH,你就不能直接运行常规的
ssh root@server_ip
而是要在服务商后台手动设置端口转发后访问对应的端口。
ssh root@server_address -p 2222 #假设设置了2222端口转发到22
其他什么硬盘什么CPU都是云服务商的产品组合,和NAT机的本质毫无关联。
其次,NAT机可以建站吗?
设备本身不是问题,只要符合网络管理法规,完成备案、运营合规,你就是拿智能手机建站都没人管你。真正问题在于网络:云服务商图管理方便不开放80和443端口或者已经被同访问入口的其他用户占用了。这种问题解决起来也很简单,许多CDN都会支持非标端口回源,只要设置回源就行。
此外,云服务商给的端口太少怎么办?
这个问题其实很常见,端口对云服务商来说也是成本,但它其实不应该成为问题。云服务商对端口的限制只是对外部访问,NAT机本地访问自身的端口并没有受到限制。
我们以最极端的2端口为例,将其中一个端口用作服务器管理,用来访问SSH或者运维面板。那么这个时候只留下了其中一个端口,自然是转发到80或者443来对接网站了。但是我有几个站点,怎么办?对于可以使用运维面板的设备,当然是随意在面板里添加站点就可以了,那设备规格较小不适合安装面板的呢?运维面板的一机多站一般是通过nginx实现,nginx也能进行手动配置,通过hostname、path甚至自定义请求头等依据将网络请求分流到不同的本地端口或者Unix Domain Socket。
#########################################################
# 根据请求头分发策略 (使用map指令)
map $http_custom_header $backend_uds {
default http://backend_default; # 默认后端
"value_A" http://backend_A; # 自定义头值指向后端A
"value_B" http://backend_B; # 自定义头值指向后端B
}
# 定义上游服务器组,可混合使用端口和UDS
upstream backend_default {
server 127.0.0.1:8080; # 回退到本地端口
}
upstream backend_A {
server unix:/tmp/app1.sock; # 指向UDS
}
upstream backend_B {
server 127.0.0.1:5713; # 指向本地端口
}
#这一段是为了定义自定义请求头的对应关系,请求头可以在客户端应用或者CDN的回源规则进行设置
#########################################################
server {
listen 80; # 监听同一端口
# 基于不同主机名 (Host) 的分发
server_name api.example.com;
location / {
proxy_pass http://unix:/tmp/api.sock; # 转发到UDS
include proxy_params;
}
server_name app.example.com;
location / {
proxy_pass http://127.0.0.1:8080; # 转发到本地端口
include proxy_params;
}
# 基于路径 (Path) 的分发
server_name example.com;
location /app1/ {
proxy_pass http://unix:/tmp/app1.sock; # 转发到UDS
include proxy_params;
}
location /app2/ {
proxy_pass http://127.0.0.1:5713; # 转发到本地端口
include proxy_params;
}
# 基于请求头 (Header) 的分发
location / {
# 使用map中定义的变量进行分发
proxy_pass $backend_uds;
include proxy_params;
}
}
# 可复用的代理参数集
proxy_params:
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
暂无评论内容