关于Nginx的虚拟主机和反向代理的讲解

在讲解开始之前,我们先来认识几个概念。

什么是nginx

               应用场景

        linux安装及其常用命令

nginx能做什么

什么是虚拟主机

        如何配置

什么是反向代理

        如何配置

         nginx实现前后端分离

负载均衡


 

在讲解开始之前,我们先来认识几个概念。

什么是nginx

Nginx是一款高性能的http 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。由俄罗斯的程序设计师Igor Sysoev所开发,官方测试nginx能够支支撑5万并发链接,并且cpu、内存等资源消耗却非常低,运行非常稳定。

应用场景

  1. http服务器。Nginx是一个http服务可以独立提供http服务。可以做网页静态服务器。
  2. 虚拟主机。可以实现在一台服务器虚拟出多个网站。例如个人网站使用的虚拟主机。
  3. 反向代理,负载均衡。当网站的访问量达到一定程度后,单台服务器不能满足用户的请求时,需要用多台服务器集群可以使用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功能很强大,学习之路还很漫长。

如果帮助到了你,倍感荣幸,千里之行始于足下。

 

 


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值