大同建设银行保安招聘网站,wordpress添加发布视频教程,dns修改国外网站,seo技术入口文章目录1. 文章引言2. 何谓反向代理3. 解析nginx的配置文件3.1 全局块(global block)3.2 events块(events block)3.3 http块(http block)4. 如何配置反向代理4.1 反向代理示例14.2 反向代理示例25. 补充说明5.1 location指令说明5.2 nginx完整配置文件1. 文章引言 如果你的服务…
文章目录1. 文章引言2. 何谓反向代理3. 解析nginx的配置文件3.1 全局块(global block)3.2 events块(events block)3.3 http块(http block)4. 如何配置反向代理4.1 反向代理示例14.2 反向代理示例25. 补充说明5.1 location指令说明5.2 nginx完整配置文件1. 文章引言 如果你的服务器还未安装nginx你可以参考网上的资料来安装它。
我们都知道nginx是一款轻量级的Web服务器、反向代理服务器由于它的内存占用少启动极快高并发能力强在互联网项目中广泛应用如下图所示 接下来我便重点介绍nginx的反向代理但在介绍前我们先了解nginx的正向代理。
什么是nginx的正向代理呢
如果把局域网外的Internet想象成一个巨大的资源库则局域网中的客户端要访问Internet则需要通过代理服务器来访问这种代理服务就称为正向代理如下图所示 我们在日常工作中常用到正向代理比如你使用单位的局域网去访问互联网。
正向代理容易理解那么反向代理是什么呢我接下来便详细介绍。
2. 何谓反向代理 我们经常访问百度服务器直接地址栏中输入www.baidu.com即可百度后端有若干台服务器来支持用户的搜索如下图所示 但用户不关心访问的是哪台服务器用户关心的是只要能搜到数据就行这就是我们常说的反向代理。
客户端对反向代理是无感知的因为客户端不需要任何配置就可以访问。
我们只需要将请求发送到反向代理服务器由反向代理服务器去选择目标服务器获取数据后在返回给客户端。
此时反向代理服务器和目标服务器对外就是一个服务器暴露的是代理服务器地址隐藏了真实服务器 IP地址。
正向代理和反向代理的区别如下 如果我们客户端自己用就是正向代理。 如果是在服务器用用户无感知就是反向代理。
3. 解析nginx的配置文件 俗话说预先善其事必先利其器。
因而在学习nginx之前要熟知它的配置文件。
毕竟如下需要做的所有配置反向代理、负载均衡、动静分离等都是基于它的配置文件。
nginx的默认配置文件是在安装目录的conf目录下后续对nginx的使用基本上都是基于此配置文件进行修改。 完整的配置文件可以看下文章的最后。 修改过nginx.conf配置文件记得要重启nginx服务。 配置文件使用#来注释内容去掉部分以#开头的段落可以看到如下精简后的配置文件内容
# 主进程叫master负责管理子进程子进程叫worker
# worker_processes配置项表示开启几个业务进程一般和cpu核数有关
worker_processes 1;events {worker_connections 1024;
}http {# include表示可以引入其他文件此处表示引入http mime类型include mime.types;default_type application/octet-stream;sendfile on;keepalive_timeout 65;# 虚拟主机可以配置多个server {listen 80;server_name localhost;location / {# 路径匹配之后哪个目录下去匹配相应的网页,html是相对路径root html;index index.html index.htm;}error_page 500 502 503 504 /50x.html;location /50x.html {root html;}}
【注意】其实注释掉的地方都是某些功能的示例代码若使用则取消注释即可。
去掉注释信息后可将nginx.conf配置文件分为如下三部分 第一部分全局块 第二部分events块 第三部分http块
当然我会详细介绍第三部分的http快。
3.1 全局块(global block)
从配置文件开始到events块之间的内容便是全局块它主要会设置一些影响Nginx服务器整体运行的配置指令。
比如开启几个业务进程的worker_processes如下代码所示 worker_processes 1;worker_processes是nginx服务器并发处理服务的关键配置该值越大可以支持的并发处理量也越多但是会受到硬件、软件等设备的约束。
当然除了worker_processes的配置全局块还有几个主要的配置 配置运行nginx服务器的用户组 进程pid存放路径 日志存放路径和类型以及配置文件的引入等。
3.2 events块(events block)
events块涉及的指令主要影响nginx服务器与用户的网络连接常用的设置如下 是否开启对多work process下的网络连接进行序列化。 是否允许同时接收多个网络连接选取哪种事件驱动模型来处理连接请求每work process可以同时支持的最大连接数等。
events {worker_connections 1024;
}此示例就表示每个work process支持的最大连接数为1024。
这部分的配置对nginx的性能影响较大在实际中应该灵活配置。
3.3 http块(http block)
这部分是nginx服务器配置中最频繁的部分代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里如下所示
http {include mime.types;default_type application/octet-stream;sendfile on;keepalive_timeout 65;server {listen 80;server_name localhost;location / {root html;index index.html index.htm;}error_page 500 502 503 504 /50x.html;location /50x.html {root html;}
}需要注意的是http块也可以包括http全局块、server块如下的反向代理、动静分离、负载均衡都是在这部分中配置。 http全局块http全局块配置的指令如下 文件引入 MIME-TYPE定义 日志自定义 连接超时时间 单链接请求数上限等。 server块这块和虚拟主机有密切关系从用户角度看虚拟主机和一台独立的硬件主机是完全一样的该技术的产生是为了节省互联网服务器硬件成本。 每个http块可以包括多个server块而每个server块就相当于一个虚拟主机。 当然每个server块又分为全局server块以及可同时包含多个的locaton块。 全局server块
最常见的配置是本虚拟机主机的监听配置和本虚拟主机的名称或IP配置。 location块
一个server块可以配置多个location块。
这块的主要作用是 基于nginx服务器接收到的请求字符串例如server_name/uri-string 对虚拟主机名称也可以是IP别名之外的字符串例如 前面的/uri-string进行匹配 对特定的请求进行处理。地址定向、数据缓存和应答控制等功能 还有许多第三方模块的配置也在这里进行如下所示
http {include mime.types;default_type application/octet-stream;sendfile on;keepalive_timeout 65;server {listen 80;server_name localhost;# 若请求路径像这样www.xxxx/img/example.png# 则访问/img/目录下的文件时nginx会去/var/www/image/img/目录下找文件location /img/ {root /var/www/image;}error_page 500 502 503 504 /50x.html;location /50x.html {root html;}
}
4. 如何配置反向代理 通过以下两种示例的配置来演示如何配置反向代理。
4.1 反向代理示例1
实现效果使用nginx反向代理访问www.superjson.com直接跳转到127.0.0.1:8081
【注意】此处如果要想从www.superjson.com跳转到本机指定的ip需要修改本机的hosts文件。
如何修改本机hosts可以参考网上教程。
配置代码如下所示
server {listen 80;server_name 192.168.20.102;location / {root html;index index.html index.htm;proxy_pass http://127.0.0.1:8081}
}如上配置nginx监听80端口访问域名为www.superjson.com不加端口号时默认为80端口故访问该域名时会跳转到127.0.0.1:8081路径上。 此处的意为nginx反向代理服务监听192.168.20.102的80端口如果有请求过来则转到proxy_pass配置的对应服务器上仅此而已。 在location下同时配置root和proxy_pass选项时两个选项只会二选一执行。 此处不能配置https反向代理。 在浏览器的地址栏中输入http://www.superjson.com/则访问到http://127.0.0.1:8081如下图所示 4.2 反向代理示例2
实现效果使用Nginx反向代理根据访问的路径跳转到不同端口的服务中nginx监听端口为 8011。 访问http://192.168.20.102/edu/直接跳转到 127.0.0.1:8082 访问http://192.168.20.102/test/直接跳转到127.0.0.1:8083 首先准备两个tomcat一个8082端口一个8083端口且准备好测试的页面。 修改nginx的配置文件在http块中配置server如下所示
server {listen 8011;server_name 192.168.20.102;location ~ /edu/ {proxy_pass http://127.0.0.1:8082}location ~ /test/ {proxy_pass http://127.0.0.1:8083}
}如上配置当请求到达nginx反向代理服务器时会根据请求路径不同进行分发到不同的服务上。
5. 补充说明
5.1 location指令说明
该指令用于匹配URL 语法如下
location [ | ~ | ~* | ^~] uri {}用于不含正则表达式的uri前要求请求字符串与uri严格匹配如果匹配成功就停止继续向下搜索并立即处理该请求 ~用于表示uri包含正则表达式并且区分大小写 ~*用于表示uri包含正则表达式并且不区分大小写 ^~用于不含正则表达式的uri前要求nginx服务器找到标识uri和请求。字符串匹配度最高的 location后立即使用此location处理请求而不再使用location块中的正则uri和请求字符串做匹配。
【注意】如果uri包含正则表达式则必须要有~或者~*标识
5.2 nginx完整配置文件
#user nobody;
worker_processes 1;#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;#pid logs/nginx.pid;events {worker_connections 1024;
}http {include mime.types;default_type application/octet-stream;#log_format main $remote_addr - $remote_user [$time_local] $request # $status $body_bytes_sent $http_referer # $http_user_agent $http_x_forwarded_for;#access_log logs/access.log main;sendfile on;#tcp_nopush on;#keepalive_timeout 0;keepalive_timeout 65;#gzip on;server {listen 80;server_name localhost;#charset koi8-r;#access_log logs/host.access.log main;location / {root html;index index.html index.htm;}#error_page 404 /404.html;# redirect server error pages to the static page /50x.html#error_page 500 502 503 504 /50x.html;location /50x.html {root html;}# proxy the PHP scripts to Apache listening on 127.0.0.1:80##location ~ \.php$ {# proxy_pass http://127.0.0.1;#}# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000##location ~ \.php$ {# root html;# fastcgi_pass 127.0.0.1:9000;# fastcgi_index index.php;# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;# include fastcgi_params;#}# deny access to .htaccess files, if Apaches document root# concurs with nginxs one##location ~ /\.ht {# deny all;#}}# another virtual host using mix of IP-, name-, and port-based configuration##server {# listen 8000;# listen somename:8080;# server_name somename alias another.alias;# location / {# root html;# index index.html index.htm;# }#}# HTTPS server##server {# listen 443 ssl;# server_name localhost;# ssl_certificate cert.pem;# ssl_certificate_key cert.key;# ssl_session_cache shared:SSL:1m;# ssl_session_timeout 5m;# ssl_ciphers HIGH:!aNULL:!MD5;# ssl_prefer_server_ciphers on;# location / {# root html;# index index.html index.htm;# }#}
}