计算机网络基础知识(正反向代理、nginx配置、交换机路由器、ssl证书申请、4层7层代理)
Proxy :代理服务器
一、正向代理
由于技术需要要去访问国外的某些网站,此时你会发现位于国外的某网站我们通过浏览器是没有办法访问的。
于是我们将请求发送给代理服务器,代理服务器去访问国外的网站,然后将访问到的数据传递给我们,这样的代理模式称为正向代理。
特点:
1、客户端非常明确要访问的服务器地址;
2、服务器只清楚请求来自哪个代理服务器,而不清楚来自哪个具体的客户端,隐藏了客户端的真实信息;
3、代理服务器知道用户的访问信息,所以公司可以通过代理服务器来查看员工的访问信息,以及通过设置代理服务器来限制一些网站的访问。
突破限制
比如有五台服务器,位于一个内网中,但是只有一台可以访问公网。那么此时通过配置这台服务器作为正向代理,其他四台服务器便也都可以访问公网,这个场景在云服务器中很常见;由于我们的计算机无法直接访问敏感网站,但是代理服务器可以,而我们的计算机访问代理服务器又是没问题的。因此,通过使用代理服务器,我们便可以间接访问到我们感兴趣的网站。
流量控制与流量统计
由于所有的流量都经过代理,通过配置代理,我们可以对流量进行任意控制。比如,不允许访问淘宝等,很多公司会对员工的网络访问进行限制,便是通过正向代理实现。除了控制之外,使用正向代理也可以对流量进行统计。通过解析代理的访问日志,使用一些类似 awstats 的工具,便可以得到流量的详细统计信息。
提升性能
正向代理可以缓存经常被访问的网站,从而大幅提升访问速度。
二、反向代理
淘宝网站,每天同时连接到网站的访问人数已经爆表,单个服务器远远不能满足负载。
此时就出现了分布式部署,也就是通过部署多台服务器来解决访问人数限制的问题。
多个客户端给服务器发送的请求,Nginx 服务器接收到之后,按照一定的规则分发给业务处理服务器。
此时请求的来源也就是客户端是明确的,但是请求具体由哪台服务器处理的并不明确了,Nginx 扮演的就是一个反向代理角色。
反向代理的作用:
保证内网的安全,通常将反向代理作为公网访问地址,Web 服务器是内网。负载均衡,通过反向代理服务器来优化网站的负载
通常情况下,正向代理和反向代理会存在同一个应用场景中,比如你在公司的客户端访问淘宝网站
三、Nginx配置
之前有写nginx的安装:https://www.cnblogs.com/whitewall/p/11876016.html
1、查找相关目录(小写v只会展示版本)
nginx -V
命令运行后整理如下图
2、配置文件
见上图,总入口是上图的conf-path指向的那个conf文件,这个文件里面有引入2个来源(一个是conf.d下所有的conf结尾的文件,一个是sites-enabled文件夹下的所有文件)
## # Virtual Host Configs ## include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*;
默认conf.d文件下是我们自己配置代理的地方,sites-enabled下有一个default文件(我们nginx安装完后,浏览器打开页面,就是这个default配置指向的html页面)
default文件没注释的内容如下(监听80端口,然后root是工作目录,index则是工作目录下是要返回的页面,为了接了多个页面我也不懂)
server { listen 80 default_server; listen [::]:80 default_server; root /var/www/html; # Add index.php to the list if you are using PHP index index.html index.htm index.nginx-debian.html; server_name _; location / { # First attempt to serve request as file, then # as directory, then fall back to displaying a 404. try_files $uri $uri/ =404; } }
3、关于conf文件中的root html
中文资料全是瞎几把写,最后google一下就出来了。
如果.conf文件没有设置过默认目录,那么默认目录可以通过命令查出来(root后面的html是上面截图prefix指向的目录下的html)
https://qastack.cn/programming/10674867/nginx-default-public-www-location
4、怎么写conf文件?
在 conf.d文件下写conf文件即可,大体格式参照上面的default,详细参数也可以百度,资料很多
5、给自己的几个服务配置反代理
参考:https://www.cnblogs.com/ifme/p/11953095.html
下面的的proxy_set_header参考这个:https://www.jianshu.com/p/cc5167032525 (我没怎么看懂,设不设置在netstat看到都是一样的,以后可能有用吧)
server_name的匹配规则:https://www.cnblogs.com/cptao/p/13491445.html
location 匹配规则:https://blog.csdn.net/youcijibi/article/details/88201629
jenkins的conf文件
server { listen 80; listen 443 ssl; server_name jenkins.whitewall.top; proxy_set_header Host $host:$server_port; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Real-PORT $remote_port; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; ssl_certificate /usr/local/nginx/cert/fullchain.crt; ssl_certificate_key /usr/local/nginx/cert/private.pem; location / { proxy_pass http://0.0.0.0:1111; proxy_connect_timeout 600; proxy_read_timeout 600; } }
半成品的conf文件
server { listen 80; listen 443 ssl; server_name demo.whitewall.top; proxy_set_header Host $host:$server_port; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Real-PORT $remote_port; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; ssl_certificate /usr/local/nginx/cert/fullchain.crt; ssl_certificate_key /usr/local/nginx/cert/private.pem; location / { proxy_pass http://0.0.0.0:2222; proxy_connect_timeout 600; proxy_read_timeout 600; } }
上面的server_name是需要在阿里云解析dns配置的,因为我下面的证书是泛域名,所以上面2个服务都可以用同一个证书
四、ssl证书申请
主要作用是为了自己的服务能够通过https访问,http和https的区别可以百度
阿里云有免费的、DV单域名、1年期的证书申请,因为我有多个服务,我是在第三方平台(https://letsencrypt.osfipin.com/ )申请的免费证书;
第三方平台是支持泛域名的,但是只有三个月有效期,过了有效期,只能重新申请了。
1、dns验证
在申请过程中需要dns验证,语雀平台的教程有问题https://www.yuque.com/osfipin/letsencrypt/kbe3a9
记录类型应该选择TXT
2、证书下载
上面验证通过后,就是证书的下载了,下载之后解压。nginx配置时需要引用下面这2个文件,所以我们需要把这2个文件上传到服务器(我是借助git项目上传的,然后mv到专门保存的文件夹)
3、在conf.d目录下配置一个conf文件 (上面有说明),下面是我copy阿里云教程的,然后把证书目录改成我自己的
阿里云的配置教程:https://help.aliyun.com/document_detail/98728.html
server { listen 443 ssl; #配置HTTPS的默认访问端口为443。 #如果未在此处配置HTTPS的默认访问端口,可能会造成Nginx无法启动。 #如果您使用Nginx 1.15.0及以上版本,请使用listen 443 ssl代替listen 443和ssl on。 server_name whitewall.top; root html; index index.html index.htm; #这2个就是配置的我放置证书文件的目录 ssl_certificate /usr/local/nginx/cert/fullchain.crt; ssl_certificate_key /usr/local/nginx/cert/private.pem; ssl_session_timeout 5m; #表示使用的加密套件的类型,不需要改 ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3; #表示使用的TLS协议的类型。 ssl_prefer_server_ciphers on; location / { root html; #站点目录。 index index.html index.htm; } }
四、交换机、路由器
路由器:是连接两个或多个网络的硬件设备,在网络间起网关的作用,是读取每一个数据包中的地址然后决定如何传送的专用智能性的网络设备。
交换机:是一种用于电(光)信号转发的网络设备
五、7层代理、4层代理
四层是指传输层,七层是指应用层
参考来源:https://cloud.tencent.com/developer/article/1048707
六、遇到的问题
1、公司hosts文件多个域名对应一个ip,那么服务器怎么区分?
请求发送到服务器上的时候,其中会有Host字段标识你请求的网站域名是什么