1.正向代理和反向代理
正向代理:浏览器是无法直接访问谷歌的,但香港的代理服务器是可以访问谷歌的,于是访问了香港的代理服务器,也就间接地访问了谷歌。那这台代理服务器也就是正向代理。总结一句就是,正向代理是代理客户端的,让你能正常访问目的服务器。
反向代理:与之相反,反向代理是代理服务器的,让大量的请求均衡地访问到某一台服务器上。例如,有10w个请求访问百度,但是如果全部压到一台服务器上,可能导致把服务器压垮,这个时候,反向代理就是均衡的让这10w个请求分散到不同服务器上,这就是反向代理。
Nginx 内置了轮询和加权轮询来达到负载均衡的目的。服务器 A 牛逼就把它的权重加大一点,让 5 万个请求访问它;服务器 B 弱一点,权重就再小一点,让 2 万个请求访问它;服务器 C 更弱,权重就最小,让 1 万个请求访问它。
2.Nginx的动静分离
在我们的软件开发中,有些请求是需要后台处理的;有些请求是不需要后台处理的,比如说 css、js 这些文件请求,这些不需要经过后台处理的文件就叫静态文件。
我们可以根据一些规则,把动态资源和静态资源分开,然后通过 Nginx 把请求分开,静态资源的请求就不需要经过 Web 服务器处理了,从而提高整体上的资源的响应速度。
3.Nginx的reload
Nginx一般启动了就不需要退出,使用最多的命令就是reload,例如修改了nginx的配置文件,这个时候就需要reload命令重启,并且,reload命令对用户是无感的,也就是用户感知不到任何变化,依然可以正常访问网页,这一点很强大。
4.Nginx的配置
main # 全局配置
├── events # 配置网络连接
├── http # 配置代理、缓存、日志等
│ ├── upstream # 配置负载均衡
│ ├── server # 配置虚拟主机,可以有多个 server
│ ├── server
│ │ ├── location # 用于匹配 URI(URL 是 URI 的一种),可以有多个 location
│ │ ├── location
│ │ └── ...
│ └── ...
└── ...
配置文件默认配置:
worker_processes 1; # Nginx 进程数,一般设置为和 CPU 核数一样
events {
worker_connections 1024; # 每个进程允许最大并发数
}
http {
include mime.types; # 文件扩展名与类型映射表
default_type application/octet-stream;
sendfile on; # 开启高效传输模式
keepalive_timeout 65; # 保持连接的时间,也叫超时时间,单位秒
server {
listen 8080; # 配置监听的端口
server_name localhost; # 配置的域名
location / {
root html; # 网站根目录
index index.html index.htm; # 默认首页文件
}
error_page 500 502 503 504 /50x.html; # 默认50x对应的访问页面
location = /50x.html {
root html;
}
}
include servers/*; # 加载子配置项
}
5.HTTP调用框架Forest
Java 生态中的 HTTP 组件库,大致可以分为三类:
- JDK 自带的 HttpURLConnection 标准库;
- Apache HttpComponents HttpClient;
- OkHttp。
使用标准库的最大好处就是不需要引入额外的依赖,但使用起来比较繁琐,就像直接使用 JDBC 连接数据库那样,需要很多模板代码。