Nginx
是一个高性能的http
和反向代理服务器,其特色是占用内存小,并发能力强。Nginx
专为性能优化而开发,性能是其最重要的考量,能经受高负载的考验,有报告代表能支持高达50000个并发链接数。html
正向代理:在浏览器中配置代理服务器,经过代理服务器进行互联网访问。java
反向代理:将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,再返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴漏的是代理服务器地址。nginx
若是请求数过大,单个服务器解决不了,咱们增长服务器的数量,而后将请求分发到各个服务器上,将原先请求集中到单个服务器的状况改成请求分发到多个服务器上,就是负载均衡。c++
为了加快服务器的解析速度,能够把动态页面和静态页面交给不一样的服务器来解析,加快解析速度,下降原来单个服务器的压力。web
Nginx
须要几个依赖包,分别是pcre
,openssl
,zlib
,在安装nginx
以前须要先安装这几个依赖。正则表达式
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
版本号pcre-config --version
复制代码
yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel
复制代码
nginx
官网下载nginx
,官网地址:nginx.org/download/;tar -xvf nginx-1.12.2.tar.gz
解压压缩包;./configure
检查;make && make isntall
编译安装;安装成功后,在usr
会多出来一个文件夹,local/nginx
,在nginx
的sbin
文件夹下有启动脚本。后端
在/usr/local/nginx/sbin
文件夹下,使用如下命令启动浏览器
./nginx
复制代码
而后浏览器访问服务器ip,nginx
默认端口是80,出现如下页面则证实nginx
安装成功;tomcat
使用这些命令时须要进入/usr/local/nginx/sbin
文件夹性能优化
nginx
的版本号./nginx -v
复制代码
nginx
./nginx
复制代码
nginx
./nginx -s stop
复制代码
nginx
./nginx -s reload
复制代码
nginx
的配置文件在/usr/local/nginx/conf
中的nginx.conf
。咱们将nginx.conf
中注释的内容删除一下。
#user nobody;
worker_processes 1;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
}
}
复制代码
nginx
的配置文件包含三部门。
1.全局块
从配置文件开始到events
块之间的内容,主要会设置一些nginx
服务器总体运行的配置指令。
worker_processes 1;
复制代码
这个表明nginx
处理并发的关键配置,值越大,处理并发能力越强。可是会受到硬件、软件等约束。
2.events块
events
块涉及的指令主要影响nginx
服务器与用户网络的链接。
worker_connections 1024;
复制代码
这个表明nginx
支持的最大链接数。
3.http全局块
nginx
服务器配置最频繁的部分。http
全局块包含http块
和server块
。
本地浏览器访问nginx
服务器,nginx
服务器反向代理tomcat
服务器,当咱们请求nginx
的时候直接访问到tomcat
。tomcat
的安装这里就不在讲了,我将tomcat
和nginx
安装在了同一台服务器上。
因为咱们的nginx
没有域名,为了演示,所以咱们在本地host
文件中配置nginx
服务器ip和域名进行绑定。这个host
文件的具体位置在C:\Windows\System32\drivers\etc
。在host文件中增长一句配置:
47.104.xxx.xxx www.javatrip.com
复制代码
前面的ip是服务器的ip地址,后面的域名是我随便起的用于绑定这个ip的一个域名。配置好以后,咱们使用域名访问一下tomcat,若是能请求到omcat
默认页面,则配置成功。
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
}
复制代码
咱们将以上默认的配置文件作个修改:
server {
listen 80;
server_name 47.104.xxx.xxx;
location / {
root html;
proxy_pass http://127.0.0.1:8080;
index index.html index.htm;
}
}
复制代码
以上这段配置的意思就是请求是47.104.xxx.xxx:80
,都会转发至47.104.xxx.xxx:8080
。
如今浏览器访问www.javatrip.com,发现直接转发到了tomcat
上了,这样简单的反向代理就完成了。
咱们再解压一个tomcat
,端口号设置为8081,分别在两个tomcat
下webapps
目录下面新建dev
和prod
目录,而后在该目录下写一个文件。
将请求www.javatrip.com:7001/dev
转发到tomcat8080
,将请求www.javatrip.com:7001/prod
转发到tomcat8081
。如今咱们的nginx
监听的端口号是7001。打开nginx
的配置文件,新建一个server
以下:
server {
listen 7001;
server_name 47.104.xxx.xxx;
location ~ /dev/ {
proxy_pass http://127.0.0.1:8080;
}
location ~ /prod/ {
proxy_pass http://127.0.0.1:8081;
}
}
复制代码
而后试试效果,分别访问`www.javatrip.com:7001/dev/a.html和www.javatrip.com:7001/prod/a.html,效果以下:
其中,配置转发的时候用到了~,其含义内容以下:
nginx
若是路径匹配那么不测试正则表达式。负载均衡(Load Balance),意思是将负载(工做任务,访问请求)进行平衡、分摊到多个操做单元(服务器,组件)上进行执行。是解决高性能,单点故障(高可用),扩展性(水平伸缩)的终极解决方案。
如今咱们想实现的效果是经过访问www.javatrip.com:7001/prod/a.html,将请求分别分发到两个tomcat上面去,首先咱们在tomcat8080
上新建一个prod
的文件夹,里面放一个a.html
的文件。这样tomcat8081
和tomcat8080
两个上就都有了一个prod
的文件加且里面有一个a.html
的文件。
首先,在http块
中配置两个tomcat
的服务列表
upstream myserver{
server 127.0.0.1:8080;
server 127.0.0.1:8081;
}
复制代码
其次,在server块
中配置规则:
server {
listen 80;
server_name 47.104.xxx.xxx;
location / {
root html;
proxy_pass http://myserver;
index index.html index.htm;
}
}
复制代码
访问地址:www.javatrip.com:7001/prod/a.html,多刷新几回。发现有的请求到tomcat8080
上,有的请求到tomcat8081
上。
upstream myserver{
server 127.0.0.1:8080;
server 127.0.0.1:8081;
}
复制代码
upstream myserver{
server 127.0.0.1:8080 weight=1;
server 127.0.0.1:8081 weight=2;
}
复制代码
session
的问题。upstream myserver{
ip_hash;
server 127.0.0.1:8080;
server 127.0.0.1:8081;
}
复制代码
upstream myserver{
server 127.0.0.1:8080;
server 127.0.0.1:8081;
fair;
}
复制代码
因为动静分离在实际开发中也不经常使用,就再也不写了。本篇文章作为一个nginx入门,到这里就基本完结了。