在讲解开始之前,我们先来认识几个概念。
什么是nginx
应用场景
linux安装及其常用命令
nginx能做什么
什么是虚拟主机
如何配置
什么是反向代理
如何配置
nginx实现前后端分离
负载均衡
在讲解开始之前,我们先来认识几个概念。
什么是nginx
Nginx是一款高性能的http 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。由俄罗斯的程序设计师Igor Sysoev所开发,官方测试nginx能够支支撑5万并发链接,并且cpu、内存等资源消耗却非常低,运行非常稳定。
应用场景
- http服务器。Nginx是一个http服务可以独立提供http服务。可以做网页静态服务器。
- 虚拟主机。可以实现在一台服务器虚拟出多个网站。例如个人网站使用的虚拟主机。
- 反向代理,负载均衡。当网站的访问量达到一定程度后,单台服务器不能满足用户的请求时,需要用多台服务器集群可以使用nginx做反向代理。并且多台服务器可以平均分担负载,不会因为某台服务器负载高宕机而某台服务器闲置的情况。
linux安装及其常用命令
环境搭建
1.官方网站:http://nginx.org/
2.需要安装gcc的环境。yum install gcc-c++
3.第三方的开发包。
PCRE
PCRE(Perl Compatible Regular Expressions)是一个Perl库,包括 perl 兼容的正则表达式库。nginx的http模块使用pcre来解析正则表达式,所以需要在linux上安装pcre库。
yum install -y pcre pcre-devel
注:pcre-devel是使用pcre开发的一个二次开发库。nginx也需要此库。
zlib
zlib库提供了很多种压缩和解压缩的方式,nginx使用zlib对http包的内容进行gzip,所以需要在linux上安装zlib库。
yum install -y zlib zlib-devel
openssl
OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。
nginx不仅支持http协议,还支持https(即在ssl协议上传输http),所以需要在linux安装openssl库。
yum install -y openssl openssl-devel
安装步骤
第一步:把nginx的源码包上传到linux系统
第二步:解压缩(最好解压缩在/usr/local/nginx方便后续学习 )
[root@localhost ~]# tar zxf nginx-1.8.0.tar.gz
第三步:使用configure命令创建一makeFile文件。
./configure
--prefix=/usr/local/nginx
--pid-path=/var/run/nginx/nginx.pid
--lock-path=/var/lock/nginx.lock
--error-log-path=/var/log/nginx/error.log
--http-log-path=/var/log/nginx/access.log
--with-http_gzip_static_module
--http-client-body-temp-path=/var/temp/nginx/client
--http-proxy-temp-path=/var/temp/nginx/proxy
--http-fastcgi-temp-path=/var/temp/nginx/fastcgi
--http-uwsgi-temp-path=/var/temp/nginx/uwsgi
--http-scgi-temp-path=/var/temp/nginx/scgi
注意:启动nginx之前,上边将临时文件目录指定为/var/temp/nginx,需要在/var下创建temp及nginx目录
[root@localhost sbin]# mkdir /var/temp/nginx/client -p
第四步:make
第五步:make install
nginx常用命令
启动nginx
进入nginx中的sbin目录
[root@localhost sbin]# ./nginx
关闭nginx:
[root@localhost sbin]# ./nginx -s stop
推荐使用:
[root@localhost sbin]# ./nginx -s quit
重启nginx: 两种方式
1.先关闭后启动。
./nginx -s stop
./nginx
2.刷新配置文件:
[root@localhost sbin]# ./nginx -s reload
访问nginx
默认是80端口。
注意:是否关闭防火墙。
nginx能做什么
虚拟主机,反向代理,负载均衡,高可用(只做介绍)
什么是虚拟主机
就是在一个服务器上面启动多个网站。
如何区分不同的网站:
1.根据域名不同
2.根据端口不同
如何配置
Nginx的配置文件:
/usr/local/nginx/conf/nginx.conf
进行编辑
在http结点中进行添加server,一个server结点代表一个虚拟主机
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
#一个server结点代表一个虚拟主机
server {
listen 80; //访问的端口号
server_name localhost; //取的访问名字
#charset koi8-r;
location / {
root html; //html目录是nginx中的目录
index index.html index.htm; //索引页面
}
}
#练习添加一个虚拟主机参考
server {
listen 81;
server_name baidu.com;//如果本地测试 需要host文件里设置
location / {
root htmlTest;//html的同级目录中创建htmlTest文件
index index.html index.htm;
}
}
}
}
本地测试可以修改hosts文件。
修改window的hosts文件:(C:\Windows\System32\drivers\etc)
可以配置域名和ip的映射关系,如果hosts文件中配置了域名和ip的对应关系,不需要走dns服务器。
操作之后重启服务器
sbin/nginx -s reload
什么是反向代理
简略的表述就是跨域请求的转发,我们发送请求交给一个中间人,中间人可以访问他所在区域的资源。
什么又是跨域呢?
只要域名、协议、端口均相同就不叫跨域,反之则为跨域。
代理解决跨域问题举例:
去监狱里面看望前女友,你是不能直接进去监狱里面的,你最多能访问到的区域就是接待大厅之类的地方,再往里面就不允许(再往里面就是跨域,不能直接访问),但是你想和你前女友说说话,交流一下。怎么办?通过监狱工作员(nginx)进行访问前女友,把要发送的请求给监狱长说,他转交给前女友。前女友给你的回复,再通过监狱长给你转交。你是知道是有中间人给你转交信息的,这种叫做正向代理。
举例盗梦空间电影,你和女朋友之间的交流你以为是面对面的其实是有一些情况你不知晓的,但是最后的最后你完成了你和女朋友之间的通信(举例勉强倔强了)。
如何配置
和之前的虚拟主机一样 只不过多加了一个结点upstream xxx
举例:
反向代理的配置
upstream spring{ //起的标记名spring
server 192.168.1.1:8080; //转发送达的服务器,是被代理的服务器
}
server{
listen 80; //我们可以通过什么端口来访问location中proxy_pass指定的路径。
server_name www.sina.com; //我们可以通过什么域名来访问location中proxy_pass指定的路径。
location/{
proxy_pass http://spring; //要代理的标记名字 前面要加上相应的协议 http://
index index.html index.htm;
}
}重启服务器
./nginx -s reload
这样我们就能通过访问www.sina.com访问我们服务器的8080端口的资源了
nginx实现前后端分离
- 前端的工作:实现整一个前端页面以及交互逻辑,以及利用ajax与服务器之间的路径交互
- 后端的工作:提供API接口,利用redis来管理session,与数据库交互
upstream backend {#服务器ip地址 假设192.168.1.1
server 192.168.1.1:8080;
}server {
listen 80;
server_name springshenjun.com;#静态页面目录
root /home/aojueyi/frontend;
# 默认首页
index index.html;
# 动态页面,交给tomcat处理
if ( !-e $request_filename) {
proxy_pass http://backend;
}
}这样我们在前台界面ajax请求就可以了,也解决了跨域jsonp问题。
比如我们的前台界面某一个按钮想访问192.168.1.1:8080/payGo/login/请求
现在就可以springshenjun.com/payGo/login
现在我们在前台界面就可以ajax(url = "/payGo/getUser"),dataType默认json格式就能完成我们的需求。
负载均衡
如果一个服务由多条服务器提供,需要把负载分配到不同的服务器处理,需要负载均衡
关于负载均衡的配置就更简单了,和前后端分离一样也是在反向代理的基础上
upstream spring {
server 192.168.1.1:8081;
server 192.168.1.1:8082;
}
可以根据服务器的实际情况调整服务器权重。权重越高分配的请求越多,权重越低,请求越少。默认是都是1
upstream spring {
server 192.168.1.1:8081; #这个内存空间是2G
server 192.168.1.1:8082 weight=2; #比如这个内存空间是4G
}
这样nginx就帮我们完成了我们想做的事,
关于nginx功能很强大,学习之路还很漫长。
如果帮助到了你,倍感荣幸,千里之行始于足下。