基本概念
Nginx 最常的用途是提供反向代理服务,那么什么反向代理呢?正向代理相信很多大陆同胞都在这片神奇的土地上用过了,原理大致如下图:
代理服务器作为客户端这边的中介接受请求,隐藏掉真实的客户,向服务器获取资源。如果代理服务器在长城外的话还能顺便帮助我们实现翻越长城的目的。而反向代理顾名思义就是反过来代理服务器作为服务器的中介,隐藏掉真实提供服务的服务器,原理大致如下图:
这么做当然不是为了实现翻越长城,而是为了实现安全和负载均衡等一系列的功能。所谓安全指客户端的请求不会直接落到内网的服务器上而是通过代理做了一层转发,在这一层就可以实现安全过滤,流控,防 DDOS 等一系列策略。而负载均衡指我们可以水平扩展后端真正提供服务的服务器数量,代理按规则转发请求到各个服务器,使得各个服务器的负载接近均衡。
而 nginx 就是目前流行的这样一个反向代理服务。
在 Ubuntu 下,可以舍去编译安装的过程,直接 apt-get
sudo apt-get install nginx
sudo service nginx start
初始配置
nginx 的默认配置文件位于
/etc/nginx/nginx.conf
include /etc/nginx/sites-enabled/*;
server { server_name localhost; listen 80 default_server; listen [::]:80 default_server ipv6only=on;root /usr/share/nginx/html; index index.html index.htm;
location / { try_files $uri $uri/ =404; } }
一个大型的网站通常会有很多下属的站点,有各自的服务器提供相应的服务,在 nginx 中我们可以通过一个叫虚拟主机的概念来将这些不同的服务配置隔离,这就是上面配置中的 server 的含义。举例来说 google 旗下有翻译和学术两款产品我们就可以在 nginx 的配置文件中配置两个 server,servername 分别为 translate.google.com 和 scholar.google.com,这样的话不同的url请求就会对应到nginx相应的设置,转发到不同的后端服务器上。这里的 servername 是和客户端 http 请求中的 host 行进行匹配的。
本例中 server_name 为 localhost,这就是为什么我们可以在浏览器通过 localhost 访问到页面的配置。下面两个 listen 分别对应了 ipv4 和 ipv6 下的监听端口如果设为 8080,那么我们就只能通过 localhost:8080 来访问到默认页面了。
default_server 的含义是指如果有其他 http 请求的 host 在 nginx 中不存在设置的话那么就用这个 server 的配置来处理。比如我们去访问 127.0.0.1 那么也会落到这个 server 来处理。
每个 url 请求都会对应的一个服务,nginx 进行处理转发或者是本地的一个文件路径,或者是其他服务器的一个服务路径。而这个路径的匹配是通过 location 来进行的。我们可以将 server 当做对应一个域名进行的配置,而 location 是在一个域名下对更精细的路径进行配置。
在这里 location 匹配 / 开始的所有请求,即 localhost 下的 /xxx 或者 /yyy 都要走下面的配置,除了这种简单粗暴的匹配,nginx 也支持正则和完全相等及其他的精细匹配方式。而tryfiles意思是 nginx会按照接下来的顺序去访问文件,将第一个匹配的返回。比如你去请求 localhost/test,他会去寻找 /test 文件,找不到再去找 /test/ 再找不到就返回一个 404。此外我们还可以在 location的配置里用 proxypass 实现反向代理和负载均衡,不过这个最简单的配置并没有涉及
其中 root 是指将本地的一个文件夹作为所有 url 请求的根路径。比如用户请求了一个 localhost/test,那么 nginx 就会去需找 /usr/share/nginx/html 文件夹下的 test 文件返回。
而 index 就是默认的访问页面了,当我们访问 localhost 时,他会自动按顺序寻找 root 文件路径下的 index.html 和 index.htm 将第一个找到的结果返回。
location 进阶配置
上面的配置只是将用户的 url 映射到本地的文件,并没有实现传说中的反向代理和负载均衡(当然 nginx 做静态文件的分发也是想到的厉害),下面我们就来进一步配置 location 看看怎么实现。
配置起来很简单比如我要将所有的请求到转移到真正提供服务的一台机器的 8080 端口,只要这样:
location / { proxy_pass 123.34.56.67:8080; }
upstream backend { ip_hash; server backend1.example.com; server backend2.example.com; server backend3.example.com; server backend4.example.com; } location / { proxy_pass http://backend; }
要让配置生效,我们不必重启 nginx 只需要 reload 配置即可。
sudo service nginx reload
总结
以上是最简单的通过 nginx 实现静态文件转发、反向代理和负载均衡的配置。在 nginx 中所有的功能都是通过模块来实现的,比如当我们配置 upstream 时是对 upstream 模块,而 server 和 location 是在 http core 模块,其他的还有流控的 limt 模块,邮件的 mail 模块,https 的 ssl 模块。他们的配置都是类似的可以再 nginx 的模块文档中找到详细的配置说明。
Nginx (engine x)是一个开源、高性能的 HTTP 和反向代理 Web 服务器,同时也提供了 IMAP/POP3/SMTP 服务。
本文向大家介绍neo4j安装配置入门教程,包括了neo4j安装配置入门教程的使用技巧和注意事项,需要的朋友参考一下 注:网上找了许多教程,发现都不太适合0基础的用户,所以就自己写了一下。 推荐使用1.x版本,经测试2.3.3大量函数被遗弃。 安装启动 官网下载tar包 解压,进入bin下,运行./neo4j 在url中打开localhost:7474即可使用 配置 数据库的location设置。
本文向大家介绍Smarty环境配置与使用入门教程,包括了Smarty环境配置与使用入门教程的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Smarty环境配置与使用方法。分享给大家供大家参考,具体如下: 下载Smarty(这里以Smarty-2.6.26为例)。解压下载的文件(目录结构还蛮复杂的)。接下来演示给大家一个安装实例,看过应该会举一反三的。 (1) 在根目录下建立了新的目录lea
本文向大家介绍spring cloud学习入门之config配置教程,包括了spring cloud学习入门之config配置教程的使用技巧和注意事项,需要的朋友参考一下 前言 本文主要给大家分享了关于spring cloud的入门教程,主要介绍了config配置的相关内容,下面话不多说了,来一起看看看详细的介绍吧。 简介 Spring cloud config 分为两部分 server clie
Java配置的支持主要在Spring框架的3.1加入。Spring Security 从3.2开始加入java配置支持,这让用户不使用任何XML用更简单方式配置Spring Security. 如果你熟悉第4章,安全命名空间配置,你应该找到它和Java的安全配置支持之间的相当多的相似之处。 Spring Security 提供大量的示例应用,使用`-jc 参数演示使用Java 配置Spring S
扩展由不同但相互联系的组件组成。组件可以包括 后台脚本,内容脚本,选项页,交互页面和各种逻辑文件。扩展组件是使用 Web 开发技术创建的:HTML,CSS 和 JavaScript。扩展的组件各有其功能,并且是可选的。 本教程将构建一个扩展,允许用户更改 developer.chrome.com 上任何页面的背景颜色。 我们将使用许多核心组件来介绍它们之间的关系。 首先,创建一个新目录来保存扩展名