在前端生态中,代理服务扮演着重要的角色。代理服务是指一种中间层服务,用于在前端应用程序和后端服务器之间进行申请转发和数据交互。它能够提供以下性能和劣势:
- 跨域申请:代理服务能够解决浏览器的同源策略限度,使前端利用能够从不同的域名或端口申请数据。通过代理服务,前端利用能够将申请发送到同一域名下的代理服务器,并由代理服务器转发到指标服务器,从而防止跨域限度。
- 安全性和隐衷爱护:代理服务能够在前端和后端之间充当平安屏障,暗藏后端服务器的实在地址和细节。通过代理服务,能够实现平安的数据传输、身份验证和访问控制,爱护后端服务器的安全性,并提供额定的隐衷爱护。
- 缓存和性能优化:代理服务能够缓存动态资源或响应后果,以加重后端服务器的负载,并进步前端利用的性能。通过在代理层缓存数据,能够缩小对后端的申请次数,放慢响应速度,并缩小对网络带宽的占用。
- 申请转发和路由:代理服务能够依据特定的规定和条件将申请转发到不同的后端服务器,实现申请的负载平衡、路由和散发。这使得前端利用能够灵便地依据需要将申请发送到不同的服务实例或后端集群。
- 日志记录和监控:代理服务能够记录申请和响应的日志,并提供监控和剖析性能。通过代理服务,能够收集对于申请流量、性能指标和谬误日志的信息,帮忙进行故障排查、性能优化和系统监控。
总而言之,代理服务在前端生态中扮演着要害的角色,提供了跨域申请、安全性、性能优化、申请转发和监控等性能。它在构建古代前端利用中施展着重要作用,帮忙开发人员解决跨域问题、进步性能并提供更好的用户体验。
装置 nginx
这里咱们以 nginx/1.12.2
为例。须要获取源码:
$ cd /opt/
$ wget http://nginx.org/download/nginx-1.12.2.tar.gz
$ tar -zxvf nginx-1.12.2.tar.gz
编译装置
$ cd /opt/nginx-1.12.2/
$ sudo make -j2
$ sudo make install
make install
后,会笼罩之前装置的 Nginx
。Mac
通常会装置在 /usr/local/
目录下。
Nginx 配置反向代理
在 Nginx
中配置反向代理非常简单。上面是一个根本的反向代理配置示例:
编辑 Nginx
配置文件:
$ sudo vim /usr/local/nginx/conf/nginx.conf
增加如下配置项:
server {
listen 80;
server_name example.com;
location / {proxy_pass http://backend_server;}
}
启动 Nginx
:
$ sudo /usr/local/nginx/sbin/nginx
如果曾经启动了,执行上面命令从新加载配置文件:
$ sudo /usr/local/nginx/sbin/nginx -s reload
如果想要进行服务,执行上面命令:
$ sudo /usr/local/nginx/sbin/nginx -s stop
在上述示例中,咱们创立了一个服务器块(server block
),监听 example.com
的端口 80。在 location /
块中,咱们应用了 proxy_pass
指令将申请代理到名为 backend_server
的后端服务器。
确保将 example.com
替换为您的域名或服务器 IP
,将 backend_server
替换为理论的后端服务器地址。
Nginx 配置提早响应
echo-nginx-module
是一个用于 NGINX
的第三方模块,它容许在 NGINX
中进行自定义响应的生成和解决。该模块提供了一些指令和变量,能够用来构建自定义的响应内容。能够应用它来实现延时响应:
获取 echo-nginx-module
源代码,咱们下载最新稳定版(截止到 2018-12-23),并解压,不必装置:
$ cd /opt
$ wget https://github.com/openresty/echo-nginx-module/archive/v0.61.tar.gz
$ tar zxvf v0.61.tar.gz
编译 Nginx
并增加 echo-nginx-module
$ cd /opt/nginx-1.12.2/
$ ./configure --prefix=/usr/local/nginx --add-module=/opt/echo-nginx-module-0.61
请将 /opt/echo-nginx-module-0.61
替换为您理论寄存 echo-nginx-module
源代码的门路。
运行下面的 ./configure
后进行编译装置:
$ sudo make install
make install
后,会笼罩之前装置的Nginx
。
配置延时响应
在 /usr/local/nginx/conf/nginx.conf
中 server
代码块里退出如下代码:
location /hello_echo {
# 延时 5 秒
set $delay 5;
echo_sleep $delay;
default_type 'text/plain';
echo "Delayed response after 5 seconds";
}
从新加载配置文件:
$ sudo /usr/local/nginx/sbin/nginx -s reload
参考文章:https://www.cnblogs.com/52fhy/p/10166333.html
Nginx 配置 SSL
with-http_ssl_module
是 NGINX
的一个编译选项,用于在构建 NGINX
时增加反对 SSL/TLS
的功能模块。
SSL(Secure Sockets Layer)
和其继任者 TLS(Transport Layer Security)
是用于加密网络通信的协定。它们容许在客户端和服务器之间建设平安的加密连贯,以爱护数据的机密性和完整性。
通过配置 NGINX
编译时退出 with-http_ssl_module
,你能够启用 NGINX
的 SSL/TLS
性能。这样,NGINX
将可能解决加密连贯、反对 HTTPS
协定以及提供 SSL/TLS
相干的配置指令。
要应用 with-http_ssl_module
,你须要依照以下步骤编译 NGINX
:
1、配置 with-http_ssl_module
模块Nginx
配置 SSL
须要配置 http_ssl_module
模块
$ cd /opt/nginx-1.12.2/
$ ./configure --prefix=/usr/local/nginx --with-http_ssl_module
$ sudo make install
2、生成私钥和自签名证书
创立任意名文件夹,假如为~/ssl
, 在其中新建文件 sslConfigureFile.conf
[req]
default_bits = 2048
default_keyfile = server-key.pem
distinguished_name = subject
req_extensions = req_ext
x509_extensions = x509_ext
string_mask = utf8only
[subject]
countryName = Country Name (2 letter code)
countryName_default = CN
stateOrProvinceName = State or Province Name (full name)
stateOrProvinceName_default = JiangSu
localityName = Locality Name (eg, city)
localityName_default = Nanjing
organizationName = Organization Name (eg, company)
organizationName_default = Example, LLC
commonName = Common Name (e.g. server FQDN or YOUR name)
commonName_default = Example Company
emailAddress = Email Address
emailAddress_default = test@example.com
[x509_ext]
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid,issuer
basicConstraints = CA:FALSE
keyUsage = digitalSignature, keyEncipherment
subjectAltName = @alternate_names
nsComment = "OpenSSL Generated Certificate"
[req_ext]
subjectKeyIdentifier = hash
basicConstraints = CA:FALSE
keyUsage = digitalSignature, keyEncipherment
subjectAltName = @alternate_names
nsComment = "OpenSSL Generated Certificate"
[alternate_names]
DNS.1 = local.cmsk1979.com # 此处须要改为本地域名,如有须要可配合 /etc/hosts 批改
执行命令生成证书文件:
openssl req -config sslConfigureFile.conf -new -sha256 -newkey rsa:2048 -nodes -keyout ssl.key -x509 -days 365 -out ssl.crt
注:sslConfigureFile.conf 文件门路肯定要精确
按提醒执行完该命令后,将生成以下文件
~/ssl/ssl.key
~/ssl/ssl.crt
3、信赖证书
双击生成的证书进入“钥匙串拜访”,找到对应的证书
双击,抉择始终信赖,浏览器拜访就不会提醒“不平安拜访”
4、将私钥和证书文件复制到适当的地位
将生成的私钥文件 ssl.key
和证书文件 ssl.crt
复制到 Nginx
配置文件所在的目录(/usr/local/ssl
)。
5、配置 Nginx
应用自签名证书
关上 Nginx
的配置文件(通常是 /usr/local/nginx/conf/nginx.conf
)。
在适当的 server
块中,增加以下 SSL/TLS
配置:
server {
listen 443 ssl;
server_name local.cmsk1979.com;
ssl_certificate /usr/local/ssl/ssl.crt;
ssl_certificate_key /usr/local/ssl/ssl.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
# 其余 Nginx 配置...
location /hello {
default_type 'text/plain';
return 200 'hello!';
}
}
6、配置hosts
127.0.0.1 www.local.cmsk1979.com
127.0.0.1 local.cmsk1979.com
7、从新加载配置文件:
sudo /usr/local/nginx/sbin/nginx -s reload
留神:拜访时不能开启 VPN 代理,不然可能呈现拜访失败
拜访后果:
加上延时响应
将 http_ssl_module
模块和 echo-nginx-module
编译到 Nginx 中:
$ cd /opt/nginx-1.12.2/
$ ./configure --prefix=/usr/local/nginx --with-http_ssl_module --add-module=/opt/echo-nginx-module-0.61
$ sudo make install
在适当的 server
块中,增加 SSL/TLS
和延时响应的配置:
server {
listen 443 ssl;
server_name local.cmsk1979.com;
ssl_certificate /usr/local/ssl/ssl.crt;
ssl_certificate_key /usr/local/ssl/ssl.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
# 其余 Nginx 配置...
location /hello {
set $delay 5;
echo_sleep $delay;
default_type 'text/plain';
echo "Delayed response after 5 seconds";
}
}
加上反向代理
以反向代理获取 https://mstatic.cassmall.com/assets/sensors/sensorsdata1.19.4.min.js
为例,在适当的 server
块中,增加 SSL/TLS
和延时响应、反向代理的配置:
server {
listen 443 ssl;
server_name local.cmsk1979.com;
ssl_certificate /usr/local/ssl/ssl.crt;
ssl_certificate_key /usr/local/ssl/ssl.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
# 其余 Nginx 配置...
location /assets/sensors {
set $delay 5;
echo_sleep $delay;
# 传递客户端申请的头信息给指标服务器
proxy_pass https://mstatic.cassmall.com;
}
}
能够看到代理拜访是胜利的,然而延时响应的配置没有失效
这是因为 echo_sleep
是 echo-nginx-module
提供的内容处理程序,而 proxy_pass
是 ngx_http_proxy_module
提供的内容处理程序,如果在单个地位中应用这两个不同的内容处理程序,它们将发生冲突(因为 Nginx
只容许单个处理程序),并且只有一个会失效(哪个会失效是不确定的)。
在 GitHub
有一个 issue
:https://github.com/openresty/echo-nginx-module/issues/5
如果咱们对调一些配置的程序:
location /assets/sensors {
# 传递客户端申请的头信息给指标服务器
proxy_pass https://mstatic.cassmall.com;
set $delay 5;
echo_sleep $delay;
}
能够看到延时响应失效,而反向代理配置没有失效
上面给出了一个解决办法,你能够应用 echo_location
来向由 proxy_pass
配置的地位发送子申请,像这样:
# 定义一个命名地位
location /proxy/ {rewrite ^/proxy/(.*)$ /$1 break;
proxy_pass https://mstatic.cassmall.com;
}
location /assets/sensors {
set $delay 5;
echo_sleep $delay;
# 应用 echo_location 发送子申请到 /proxy 地位
echo_location /proxy/$uri;
}
返回的脚本内容出现乱码
批改配置:
# 定义一个命名地位
location /proxy/ {rewrite ^/proxy/(.*)$ /$1 break;
proxy_pass https://mstatic.cassmall.com;
proxy_set_header Accept-Encoding "";
proxy_set_header Accept-Language $http_accept_language;
proxy_set_header Content-Type "text/javascript; charset=utf-8";
}
location /assets/sensors {
set $delay 5;
echo_sleep $delay;
# 应用 echo_location 发送子申请到 /proxy 地位
echo_location /proxy/$uri;
}