做ui必要的网站安装wordpress没有选择语言
文章目录
- 1. 文章引言
 - 2. 何谓反向代理
 - 3. 解析nginx的配置文件
 - 3.1 全局块(global block)
 - 3.2 events块(events block)
 - 3.3 http块(http block)
 
- 4. 如何配置反向代理
 - 4.1 反向代理示例1
 - 4.2 反向代理示例2
 
- 5. 补充说明
 - 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 Apache's document root# concurs with nginx's 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;#    }#}
}
