nginx--正向代理、反向代理及负载均衡( 二 )


每个http块可以包括多个server块,而每个server块就相当于一个虚拟主机 。而每个server块也分为全局server块,以及可以同时包含多个locaton块 。(☆☆☆☆☆)
2.3.1 全局 server 块
最常见的配置是本虚拟机主机的监听配置和本虚拟主机的名称或IP配置 。
2.3.2 location 块
一个 server 块可以配置多个 location 块 。
这块的主要作用是:基于 Nginx 服务器接收到的请求字符串(例如 server_name/uri-string),对虚拟主机名称(也可以是 IP 别名)之外的字符串(例如 前面的 /uri-string)进行匹配,对特定的请求进行处理 。地址定向、数据缓存和应答控制等功能,还有许多第三方模块的配置也在这里进行 。
http {includemime.types;default_typeapplication/octet-stream;sendfileon;keepalive_timeout65;server {listen80;server_namelocalhost;# 若请求路径像这样:www.xxxx/img/example.png# 则访问/img/目录下的文件时,nginx会去/var/www/image/img/目录下找文件location /img/ {root /var/www/image;}error_page500 502 503 504/50x.html;location = /50x.html {roothtml;}}3. 反向代理如何配置3.1 反向代理实例一实现效果:使用 Nginx 反向代理,访问www.123.com直接跳转到127.0.0.1:8080
注意:此处如果要想从www.123.com跳转到本机指定的ip,需要修改本机的hosts文件 。此处略过
配置代码

nginx--正向代理、反向代理及负载均衡

文章插图
 
如上配置,Nginx监听 80端口,访问域名为www.123.com(不加端口号时默认为 80端口),故访问该域名时会跳转到 127.0.0.1:8080 路径上 。
此处的意思为:nginx 反向代理服务监听 192.168.17.129的80端口,如果有请求过来,则转到proxy_pass配置的对应服务器上,仅此而已 。
在location下,同时配置root和proxy_pass选项时,两个选项只会二选一执行
此处不能配置https反向代理
实验结果:
nginx--正向代理、反向代理及负载均衡

文章插图
 
3.2 反向代理实例二
实现效果:使用 Nginx 反向代理,根据访问的路径跳转到不同端口的服务中,Nginx 监听端口为 9001
访问
http://192.168.17.129/edu/直接跳转到 127.0.0.1:8080
访问
http://192.168.17.129/vod/直接跳转到 127.0.0.1:8081
第一步,需要准备两个 Tomcat,一个 8080 端口,一个 8081 端口,并准备好测试的页面
第二步,修改 nginx 的配置文件,在 http 块中配置 server
nginx--正向代理、反向代理及负载均衡

文章插图
 
根据上面的配置,当请求到达 Nginx 反向代理服务器时,会根据请求路径不同进行分发到不同的服务上 。
实验结果:
nginx--正向代理、反向代理及负载均衡

文章插图
 
补充:location 指令说明
该指令用于匹配 URL,语法如下:
location [ = | ~ | ~* | ^~] uri {}= :用于不含正则表达式的 uri 前,要求请求字符串与 uri 严格匹配,如果匹配成功,就停止继续向下搜索并立即处理该请求
~:用于表示 uri 包含正则表达式,并且区分大小写
~*:用于表示 uri 包含正则表达式,并且不区分大小写
^~:用于不含正则表达式的 uri 前,要求 Nginx 服务器找到标识 uri 和请求 。字符串匹配度最高的 location 后,立即使用此 location 处理请求,而不再使用 location块中的正则 uri 和请求字符串做匹配 。
注意:如果 uri 包含正则表达式,则必须要有 ~ 或者 ~* 标识
Nginx完整配置文件
#usernobody;worker_processes1;#error_loglogs/error.log;#error_loglogs/error.lognotice;#error_loglogs/error.loginfo;#pidlogs/nginx.pid;events {worker_connections1024;}http {includemime.types;default_typeapplication/octet-stream;#log_formatmain'$remote_addr - $remote_user [$time_local] "$request" '#'$status $body_bytes_sent "$http_referer" '#'"$http_user_agent" "$http_x_forwarded_for"';#access_loglogs/access.logmain;sendfileon;#tcp_nopushon;#keepalive_timeout0;keepalive_timeout65;#gzipon;server {listen80;server_namelocalhost;#charset koi8-r;#access_loglogs/host.access.logmain;location / {roothtml;indexindex.html index.htm;}#error_page404/404.html;# redirect server error pages to the static page /50x.html#error_page500 502 503 504/50x.html;location = /50x.html {roothtml;}# proxy the php scripts to Apache listening on 127.0.0.1:80##location ~ .php$ {#proxy_passhttp://127.0.0.1;#}# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000##location ~ .php$ {#roothtml;#fastcgi_pass127.0.0.1:9000;#fastcgi_indexindex.php;#fastcgi_paramSCRIPT_FILENAME/scripts$fastcgi_script_name;#includefastcgi_params;#}# deny access to .htaccess files, if Apache's document root# concurs with nginx's one##location ~ /.ht {#denyall;#}}# another virtual host using mix of IP-, name-, and port-based configuration##server {#listen8000;#listensomename:8080;#server_namesomenamealiasanother.alias;#location / {#roothtml;#indexindex.html index.htm;#}#}# HTTPS server##server {#listen443 ssl;#server_namelocalhost;#ssl_certificatecert.pem;#ssl_certificate_keycert.key;#ssl_session_cacheshared:SSL:1m;#ssl_session_timeout5m;#ssl_ciphersHIGH:!aNULL:!MD5;#ssl_prefer_server_cipherson;#location / {#roothtml;#indexindex.html index.htm;#}#}}


推荐阅读