HTTP服务器Nginx能做什么:正向反向代理、负载均衡
反向代理
反向代理应该是Nginx最常见的事情了。那么,什么是反向代理?以下是百度百科的说法: 反向代理方式(Reverse Proxy)是指利用代理服务器接收互联网上的连接请求,然后将请求转发给内网的服务器,并得到结果从服务器。返回到请求 Internet 连接的客户端。此时,代理服务器对外界表现为反向代理服务器。简单来说,外网无法直接访问真实服务器,所以需要代理服务器。代理服务器可以被外部网络访问,并且与真实服务器处于同一网络环境。当然,它可以是相同的服务器和端口。只是不同。下面贴上实现反向代理的简单代码
server {
listen 80;
server_name localhost;
client_max_body_size 1024M;
location / {
proxy_pass http://localhost:8080;
proxy_set_header Host $host:$server_port;
}
}
复制代码保存配置文件并启动Nginx,这样我们访问localhost时就和访问localhost:8080一样了
负载均衡
负载均衡也是Nginx A.功能使用,负载均衡是指将执行任务分配给多个运行单元,如Web服务器、FTP服务器、企业关键应用服务器等关键任务服务器,以便同时完成工作任务。简单来说,当有两台或两台以上服务器时,请求按照规则随机分发到指定的服务器上进行处理。配置负载均衡一般需要同时配置反向代理,通过反向代理切换到负载均衡。 Nginx 目前支持 3 种内置的负载均衡策略,以及 2 种常用的第三方策略。
RR(默认)
每个请求按时间顺序分配给不同的后端服务器。如果后端服务器出现故障,可以自动删除。配置简单
upstream test {
server localhost:8080;
server localhost:8081;
}
server {
listen 81;
server_name localhost;
client_max_body_size 1024M;
location / {
proxy_pass http://test;
proxy_set_header Host $host:$server_port;
}
}
复制代码负载均衡的核心代码是
upstream test {
server localhost:8080;
server localhost:8081;
}
复制代码这里我配置了2台服务器。当然,实际上是一个,只是端口不同而已。服务器8081不存在,也就是说无法访问。 ,但是当我们访问http://localhost时,就不会出现问题了。默认会跳转到http://localhost:8080。这是特别的,因为 Nginx 会自动确定服务器状态。如果服务器无法访问(服务器宕机),则不会跳转到该服务器,以免出现服务器卡住影响使用的情况。由于Nginx默认采用RR策略,因此我们不需要任何其他设置。
权重
确定轮询的概率。权重与访问比例成正比,当后端服务器性能参差不齐时使用。比如
upstream test {
server localhost:8080 weight=9;
server localhost:8081 weight=1;
}
复制代码一般10次只有1次会访问8081,9次会访问8080。
ip_hash
上面两种方法有一个问题,就是下一个请求来了。此时,请求就可以分发到其他服务器了。虽然我们的程序不是无状态的(使用会话来存储数据),但此时就会出现一个大问题。例如,如果登录信息存储在session中,那么跳转到另一台服务器时,就必须重新登录,所以很多时候我们需要一个客户只能访问一台服务器,那么我们就不得不使用iphash。每个iphash请求都会根据访问IP的哈希结果进行分配,这样每个访问者仍然可以访问后端服务器,解决会话问题。
upstream test {
ip_hash;
server localhost:8080;
server localhost:8081;
}
复制代码fair(第三方)
根据后端服务器的响应时间允许请求,响应时间短的优先。
upstream backend {
fair;
server localhost:8080;
server localhost:8081;
}
复制代码url_hash(第三方)
根据访问的URL的哈希结果分发请求,使每个URL都定向到同一个后端服务器。当后端服务器有缓存时更有效。在上游添加哈希语句。服务器语句中不能写入体重等其他参数。 hash_method是使用的哈希算法。
upstream backend {
hash $request_uri;
hash_method crc32;
server localhost:8080;
server localhost:8081;
}
复制代码以上5种负载均衡适合不同的情况使用,大家可以根据实际情况选择使用的策略。模式,但fair和url_hash必须安装第三方模块才可以使用。由于本文主要介绍Nginx能做什么,因此本文不会介绍Nginx第三方模块的安装,Nginx是服务器。同时现在非常流行将静态资源与静态资源分离,这可以通过Nginx来实现。首先我们来看看Nginx作为一个静态资源服务器
server {
listen 80;
server_name localhost;
client_max_body_size 1024M;
location / {
root e:\wwwroot;
index index.html;
}
}
复制代码这样当你访问http://localhost时就会默认访问E盘wwwroot目录下的index.html。如果网站只是静态页面,可以这样部署。动静分离。划分完动静态资源后,我们就可以根据静态资源来划分了。这就是静态网站处理的核心思想
upstream test{
server localhost:8080;
server localhost:8081;
}
server {
listen 80;
server_name localhost;
location / {
root e:\wwwroot;
index index.html;
}
# 所有静态请求都由nginx处理,存放目录为html
location ~ \.(gif|jpg|jpeg|png|bmp|swf|css|js)$ {
root e:\wwwroot;
}
# 所有动态请求都转发给tomcat处理
location ~ \.(jsp|do)$ {
proxy_pass http://test;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root e:\wwwroot;
}
}
复制代码这样我们就可以把HTML、图片、css和js放在wwwroot目录下,而Tomcat只负责处理jsp和请求。例如,当我们的后缀为gif时,Nginx会默认生成当前从wwwroot请求的动态图片文件。当然,这里的静态文件是和Nginx在同一台服务器上的。我们也可以在其他服务器上使用,然后使用反向代理和负载均衡。只要管理就好。只要了解了最基本的流程,很多配置就非常简单了。另外,本地化其实后面是正则表达式,所以非常灵活
正向代理
正向代理,意思是客户端和源服务器之间的Server。要从源服务器获取内容,客户端向代理发送请求并指定目标(源服务器)。然后,代理将请求转发到源服务器并检索内容。回到客户端。只有客户端才能使用高级代理。如果需要使用服务器作为代理服务器,可以使用Nginx来实现高级代理。不过Nginx目前有一个问题,那就是不支持HTTPS。虽然我去百度配置了HTTPS的高级代理,但最后发现代理还是不行。当然,也有可能我的配置是错误的,所以也希望知道正确方式的朋友可以留言说明。
resolver 114.114.114.114 8.8.8.8;
server {
resolver_timeout 5s;
listen 81;
access_log e:\wwwroot\proxy.access.log;
error_log e:\wwwroot\proxy.error.log;
location / {
proxy_pass http://$host$request_uri;
}
}
复制代码resolver是配置了正向代理的DNS服务器,listening是正向代理端口。配置完成后,您可以使用服务器IP+端口号在IE或其他代理插件中进行代理。
最后的话
启动、停止和配置文件位置的命令:
/etc/init.d/nginx start/restart # 启动/重启Nginx服务
/etc/init.d/nginx stop # 停止Nginx服务
/etc/nginx/nginx.conf # Nginx配置文件位置
复制代码Nginx支持热启动,也就是说修改配置文件后,我们可以在不关闭Nginx的情况下使配置生效。当然,我不知道有多少人知道这一点。反正我一开始也不太明白,所以经常杀掉Nginx线程然后重启。 。 。 Nginx 读回配置的命令是
nginx -s reload
复制代码windows。下面
nginx.exe -s reload
作者:KoK
链接:https://juejin.im/post/5b8f963ce51d450e425e81b1
来源:掘金
版权所有。商业转载请联系作者获取授权。非商业转载请注明出处。
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
code前端网