玖叶教程网

前端编程开发入门

nginx五大核心功能全解析 #干货#高并发

1、安装nginx

Nginx作为高性能的HTTP和反向代理web服务器,有测试指出nginx能够轻松支持50000个并发连接数。nginx的安装建议通过三个步骤来实现:1、编译工具与库文件 2、PCRE(为了支持Rewrite功能)3、nginx主程序

1.1安装编译工具以及库文件

yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel

1.2安装PCRE(为了支持Rewrite功能)

##下载安装包 ##
cd /usr/local/src/
wget http://downloads.sourceforge.net/project/pcre/pcre/8.35/pcre-8.35.tar.gz
##解压安装包 ##
tar zxvf pcre-8.35.tar.gz
##进入安装包目录 ##
cd pcre-8.35
##编译安装 ##
./configure
make && make install

1.3安装nginx

##下载 Nginx ##
cd /usr/local/src/
wget http://nginx.org/download/nginx-1.22.0.tar.gz
##解压nginx ##
tar zxvf nginx-1.22.0.tar.gz
##进入nginx安装目录##
cd nginx-1.22.0
##编译安装##
./configure --prefix=/usr/local/webserver/nginx --with-http_stub_status_module --with-http_ssl_module --with-pcre=/usr/local/src/pcre-8.35
make
make instal
##启动nginx##
/usr/local/webserver/nginx/sbin/nginx
##重新启动nginx##
/usr/local/webserver/nginx/sbin/nginx -s reload

2、nginx核心功能—反向代理

反向代理应该是Nginx做的最多的一件事了。反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。

简单来说就是真实的服务器不能直接被外部网络访问,所以需要一台代理服务器,而代理服务器能被外部网络访问的同时又跟真实服务器在同一个网络环境,当然也可能是同一台服务器,端口不同而已。

反向代理代码示意

nginx.conf配置文件中,使用 proxy_pass 指令将请求转发到代理服务器

#访问http://file.dreams.com.cn的时候,就相当于访问http://127.0.0.1:8080
server
{
listen 80;#....
server_name file.dreams.com.cn;
location / {
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_set_header X-Forwarded-Host $server_name;
#代理的目标地址
proxy_pass http://127.0.0.1:8080;
}
}

3、nginx核心功能—负载均衡

Nginx负载均衡是一种廉价、灵活的实现服务高可用的方式。用户有多台服务器时,根据规则随机的将请求分发到指定的服务器上处理,负载均衡配置一般都需要同时配置反向代理,通过反向代理跳转到负载均衡。

负载均衡的核心是upstream模块,代码示例如下:

upstream backserver {
server 172.16.0.7:8080
server 172.16.0.8:8080
}
server
{
listen 80;#....
server_name file.dreams.com.cn;
location / {
#代理的目标地址
proxy_pass http://backserver;#请求http://file.dreams.com.cn转发到http://backserver
}
}

负载均衡模式——轮询:

请求按时间顺序逐一分发到不同的负载均衡服务器,如果负载均衡服务器down掉,会自动剔除。处理请求顺序:ABABAB...

upstream backserver {
server 172.16.0.7:8080;
server 172.16.0.8:8080;
}

负载均衡模式——weight:

加权轮询模式,因服务器性能不均,人为指定轮询几率,weight和访问比例成正比。处理请求顺序:AABAABAAB...

upstream backserver {
server 172.16.0.7:8080 weight=2;
server 172.16.0.8:8080 weight=1;
}

负载均衡模式——ip_hash:

每个请求按访问ip的hash值不同进行分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。后端服务器不是无状态时,就需要使用ip_hash确保同一个ip的用户访问固定后端服务器。

upstream backserver {
ip_hash;
server 172.16.0.7:8080;
server 172.16.0.8:8080;
}

负载均衡模式——fair:

根据负载均衡服务器的响应时间来分配请求,响应时间短的优先分配

upstream backserver {
server 172.16.0.7:8080;
server 172.16.0.8:8080;
fair;
}

负载均衡模式——url_hash:

根据访问url的hash结果来分配请求,使每个url定向到同一个后端服务器

upstream backserver {
server 172.16.0.7:8080;
server 172.16.0.8:8080;
hash $request_uri;
hash_method crc32;
}

4、nginx核心功能—动静分离

Nginx动静分离是指在web服务器架构中,将静态页面与动态页面或者静态内容接口和动态内容接口分开不同系统访问的架构设计方法,提升整体服务访问性能和可维护性。反向代理的时候,如果是静态资源,就直接从nginx发布的路径去读取,而不需要从后台服务器获取了。

注:一般在集群场景,动静分离都结合负载均衡来使用。

动静分离代码示例如下:

upstream backserver {
server 172.16.0.7:8080
server 172.16.0.8:8080
}
server
{
listen 80;#....
server_name file.dreams.com.cn;
location / {
root /data/web;
index index.html index.htm;
}
#所有静态资源都由nginx处理
location ~* \.(png|gif|jpg|jpeg|mp4|mp3|css|js)$ {
root /data/web;
}
#所有动态资源都由后端tomcat服务器集群处理
location ~* \.(jsp|do|php)$ {
proxy_pass http://backserver;
}
}

5、nginx核心功能—正向代理

Nginx正向代理简单来说,就是客户端通过访问目标服务端,再由目标服务端来转发流量访问互联网,这样可以达到隐藏客户端真实IP的效果。

注:可以理解为客户端通过Nginx做了一层代理,代理访问互联网

正向代理代码示例如下:

server {
listen 8099;
resolver 114.114.114.114; # dns解析服务器
location /{
proxy_pass $scheme://$host$request_uri; #proxy_pass 用来要代理的网站,
#$scheme是客户端请求的协议(如http);
#$host是客户端请求的域名(如baidu.com);
#$request_uri是客户端访问的url地址(如/baidu?s=29)。
#他们拼接成就是http://baidu.com/baidu?s=29
}
}

6、nginx核心功能—热启动(附SSL证书配置方法)

当我们修改配置文件后,不用停止Nginx,就可以实现让配置生效。

热启动代码示例如下:

#Centos重新读取配置的命令是:
./nginx -s reload
#Windows重新读取配置的命令是:
nginx.exe -s reload

nginx证书配置核心代码如下:

server {
# SSL使用443端口
listen 443 ssl;
# SSL证书绑定的域名
server_name www.dreams.com;
# 证书pem文件
ssl_certificate /usr/local/nginx/conf/fullchain.crt;
# 证书key文件
ssl_certificate_key /usr/local/nginx/conf/cert.key;
ssl_session_cache shared:SSL:1m;# 启用 SSL Session 缓存
ssl_session_timeout 5m; # 缓存SSL握手产生的参数和加密密钥的时长
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; # 使用的加密套件的类型
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;# 表示使用的TLS协议的类型
ssl_prefer_server_ciphers on; # 加密套件优先选择服务器的加密套件
location / {
root html;
index index.html index.htm;
}
}

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言