简介
nginx的基本概念,以及反向代理的配置
nginx
是一个高性能的http和反向代理web服务器及电子邮件(IMAP/POP3/SMTP)代理服务器。
相关的基本概念
正向代理
客户端配置代理服务器,通过代理服务器访问互联网。
反向代理
客户端不需要配置,访问反向代理服务器,由反向代理服务器去访问真实的服务器,获取数据并返回,它代理的是真实服务器,隐藏了真实服务器的ip地址,对外暴露代理服务器的地址。
负载均衡
把请求分发到多个服务器,以达到提高系统性能和实现高可用性的目的。
动静分离
把动态页面和静态页面交由不同的服务器来解析,以加快网站的解析速度,也可降低服务器的压力。
安装nginx
在linux上安装nginx,我用的是vmware虚拟机,使用finalshell连接。需要先安装相关的依赖。
安装pcre
下载pcre:
wget http://downloads.sourceforge.net/project/pcre/pcre/8.37/pcre-8.37.tar.gz
解压文件: tar -xvf pcre-8.37.tar.gz
进入安装目录,执行./configure
再执行make && make install
进行编译并安装
使用 pcre-config --version
查看是否安装成功
安装zlib
yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel
安装nginx
把下载好的nginx安装包上传到linux上。
使用ar -xvf nginx-1.12.2.tar.gz
进行解压。
进入nginx目录,执行./configure
执行make && make install
进行编译并安装
安装成功后,会在/usr/local目录下有一个nginx
启动nginx
进入/usr/local/nginx/sbin目录,执行./nginx
使用ps -ef | grep nginx
查看是否有nginx的进程
在Windows上,访问nginx,http://虚拟机ip地址:80
访问不到的话可能是防火墙的问题,关闭防火墙 systemctl stop firewalld.service
nginx常用命令
进入/usr/local/nginx/sbin目录中执行命令
- ./nginx -v:查看nginx的版本
- ./nginx -s stop: 关闭nginx
- ./nginx:启动nginx
- ./nginx -s reload:重新加载nginx
nginx的配置文件
配置文件是 /usr/local/nginx/conf 目录下的nginx.conf。
配置文件的组成
由三部分组成:
- 全局块
- events块
- http块
全局块
如下图,配置文件开头到events之前的配置。设置一些影响nginx服务器整体运行的配置指令,包括:
- 运行nginx服务器的用户(组)
- 允许生成的worker process数
- 进程pid存放路径
- 日志存放路径
- 配置文件的引入
解析:worker_processes 1;
设置了nginx服务器并发处理服务的相关配置,值越大支持的并发处理量就越多,会受硬件软件等的制约。设置成和cpu核数相同比较好。
events块
设置nginx服务器与用户的网络连接,包括:
- 是否开启对多work process下的网络连接进行序列化
- 是否允许同时接受多个网络连接
- 选择哪种事件驱动模型来处理连接请求
- 每个work process可以同时支持的最大连接数
http块
http块分为http全局块,server块(可多个)。
server块又分为全局server块,location块(可多个)
最常用的配置块,包括:
- 代理
- 缓存
- 日志定义
- 第三方模块的配置
http全局块
可以配置:
- 文件引入
- mine-type定义
- 日志自定义
- 连接超时时间
- 单链接请求数上限
server块
和虚拟主机相关。虚拟主机,可以看成事一台独立的硬件主机,可以节省互联网服务器硬件成本。每个http块可以有多个server块,每个server块可以看成事一个虚拟主机。
全局server块
常用于配置:
- 虚拟主机的监听配置
- 虚拟主机的名称
- 虚拟主机的ip
location块
每个server块也包含多个location块。作用是基于nginx服务器接收到的请求字符串,对虚拟主机名称之外的字符串进行匹配,对特定的请求进行处理,如:
- 地址定向
- 数据换存
- 应答控制
- 第三方模块的配置
大概的结构就是:
反向代理
要实现在浏览器上输入www.christ.com,会跳转到linux上的Tomcat上。
安装Tomcat
下载Tomcat
wget --no-check-certificate http://archive.apache.org/dist/tomcat/tomcat-7/v7.0.70/bin/apache-tomcat-7.0.70.tar.gz
使用 tar -xvf apache-tomcat-7.0.70.tar.gz
解压Tomcat
启动Tomcat
进入到/usr/src/apache-tomcat-7.0.70/bin
目录下,运行./startup.sh
可以使用 cat /usr/src/apache-tomcat-7.0.70/logs/catalina.out
查看启动日志。
外部访问Tomcat
http://linux的ip地址:8080
跳转过程
浏览器输入域名www.christ.com,首先会先到本地的host文件中有没有相应的配置,如果有就按配置执行,如果没有,就到网络上找dns域名服务器,根据配置转发到反向代理服务器上,再由反向代理服务器转发到Tomcat服务器。
修改本地的host文件
进行域名和ip地址的对应关系的配置
修改host文件,在文件末尾添加
linux的ip地址 www.christ.com
注意:修改后可能不能保存,需要cmd以管理员身份修改。
外部尝试访问www.christ.com:8080
,可以访问到Tomcat
反向代理设置
在nginx进行请求转发的配置
修改nginx的配置文件,vim /usr/local/nginx/conf/nginx.conf
修改配置文件中的server块中的server_name,改成linux的ip地址;
修改location,加上 proxy_pass http://127.0.0.1:8080;
即请求到了linux的ip地址,会被转发到匹配的location中的proxy_pass配置的地址。
外部访问www.christ.com
注意:修改了nginx的配置文件,是要重启nginx的。
反向代理例子2
使用nginx反向代理,根据访问的路径跳转到不同的端口服务上,nginx监听端口为9001.
准备两个Tomcat
创建两个文件夹Tomcat8080,Tomcat8081。里面存放解压后的Tomcat。修改Tomcat8081里面的Tomcat的端口号,进入目录/usr/src/tomcat8081/apache-tomcat-7.0.70/conf
,修改server.xml,改三个地方
启动Tomcat8080,8081
外部可以访问linux的ip地址:8080
,linux的ip地址:8081
在Tomcat中添加页面
在 Tomcat8081文件夹中的/usr/src/tomcat8081/apache-tomcat-7.0.70/webapps
目录下使用mkdir edu创建目录文件,在这个edu中vim a.html
编写一个html文件,内容是:
<h1>8081</h1>
外部尝试访问这个a.html文件,linux的ip地址/edu/a.html
。
同样的,在 Tomcat8080文件夹中的/usr/src/tomcat8080/apache-tomcat-7.0.70/webapps
目录下使用mkdir vod创建目录文件,在这个vod中vim a.html
编写一个html文件,内容是:
<h1>8080</h1>
外部尝试访问这个a.html文件,linux的ip地址/vod/a.html
。
修改nginx的配置文件
在/usr/local/nginx/conf
这个目录下的nginx.conf文件中,新添加一个server。
server {listen 9001;server_name linux的ip地址;location ~ /edu/ {proxy_pass http://localhost:8081;} location ~ /vod/ {proxy_pass http://localhost:8080;}}
重启nginx
访问http://linux的ip地址:9001/edu/a.html
访问http://linux的ip地址:9001/vod/a.html
location匹配规则
是使用正则表达式匹配的路径的。
- =:精确匹配
- ~:包含匹配字段,区分大小写
- ~*:包含匹配字段,不区分大小写
- ^~:使用和路径匹配精度最高的匹配字段,不再使用其他精度低的正则表达式匹配字段。
注意:如果使用了正则表达式,则必须要带~ 或者~* 标识、