如何运用Nginx搭建代理服务器?

如何运用Nginx搭建代理服务器?,第1张

如何实现Nginx的反向代理?

这句话什么意思?

意思是说当客户机来访问服务器的时候,服务器本身并不出面接待,而是将客户的请求转高给手下的子服务器(小弟)负责接待。

比如:你访问www.baidu.com,其实并不时百度总服务器接待的你,而是百度的代理服务器接待的你,不过他们的服务是一样的,提供同样的页面;

如是搭建Nginx服务才能实现这样的效果呢?

搭建一个最简单,最基础nginx代理服务器,需要一台代理服务,两台子服务器,XX台客户机来作验证;

操作流程如下:

第一步、服务器和客户机配好IP地址,其中Nginx代理服务器需要配置两张网卡,两个IP地址,一个和客户机通信,一个和子服务器通信;

代理服务器与客户机和子服务器都分别配置同网段IP地址;

例如:

代理服务器:192.168.4.5    192.168.2.5

子服务器         :192.168.2.100    192.168.2.200

客户机    :192.168.4.10

这样配置的好处是: 可以负载均衡,保障用户的访问体验,保障上网速度,同时也保障了,即便有一台服务器坏掉了,另一台服务可以接待用户访问;

第二步、代理服务器上安装Nginx服务软件,两台子服务器上安装HTTPD服务并写入相应的网页,然后启动服务;

yum  -y install  httpd        ##安装httpd服务;

echo  "罗贵"  >   /var/www/html/index.html       ##写一个简单的网页

./configure    --user=nginx    --group=nginx   --with-http_ssl_module

make   &&  make   install     ##编译安装Nginx

第三步、修改Nginx的配置文件

vim   /usr /local /nginx /conf /nginx.conf

http   {  ...............    ##在文件中找到http开头的行,并在http下面随意找两行添加下面两行的内容;

            upstream    luogui    {        ##luogui是集群名字,可以自由定义,upstream 上游的意思;翻译过来就是在上游建立一个名字为luogui的集群,集群中包含下述IP地址;

                      server   192.168.2.100:80

                      server    192.168.2.200:80

}

server    {

        listen        80

        server_name   www.luogui.com    ##域名,可以自由定义;

location   ^/.php$  {    ##匹配网页地址的意思,匹配以 / 开头.php结尾的网页文件;

        proxy_pass  http://luogui       ##通过proxy代理服务器将用户的请求转发给luogui集群服务器;(注:优先级最高,系统会优先处理这条命令)

             }

                             }

第四步、测试效果;

firefox   http://192.168.4.5  或者  本地测试   curl  http://192.168.4.5 

结果应该是暂停任何一台子服务器,客户机访问网页都没有问题;

以上.......

                                                    (EDN)

祝:开心!

罗贵

2019-04-05于深圳

1,切换到nginx的配置目录,找到nginx.conf文件

    cd   /usr/local/nginx/conf

    vim  nginx.conf

2,如果是单项目部署的话,只需要在nginx.conf文件里面加上以下

server{

        listen 80

        # 域名,本地测试可以使用127.0.0.1或localhost

        server_name www.zhangc.cn

        # php项目根目录

        root /home/data-www/blog

        location /{

                # 定义首页索引文件的名称

                index index.php index.html index.htm

                # 影藏入口文件

                if (-f $request_filename/index.html){

                            rewrite (.*) $1/index.html break

                }

                if (-f $request_filename/index.php){

                            rewrite (.*) $1/index.php

                }

                if (!-f $request_filename){

                            rewrite (.*) /index.php

                }

                try_files $uri $uri/ /index.php?$query_string

        }

        # PHP 脚本请求全部转发到 FastCGI处理. 使用FastCGI协议默认配置.

        # Fastcgi服务器和程序(PHP)沟通的协议

        .location ~ .*\.php${

                # 设置监听端口

                fastcgi_pass 127.0.0.1:9000

                # 设置nginx的默认首页文件

                fastcgi_index index.php

                # 设置脚本文件请求的路径

                fastcgi_param SCRIPT_FILENAME$document_root$fastcgi_script_name

                # 引入fastcgi的配置文件

                includefastcgi_params

                fastcgi_split_path_info ^(.+?\.php)(/.*)$

                set $path_info $fastcgi_path_info

                fastcgi_param PATH_INFO $path_info

                try_files $fastcgi_script_name =404

        }

}

3,如果多项目部署,就需要配置vhost

第一步:编辑nginx.conf文件,在最后加上     include    vhost/*.conf

第二步:进入vhost文件夹,创建    域名.conf    文件,如创建一个:quanma.meyat.com.conf

第三步:编辑quanma.meyat.com.conf文件,内容如下:

        server

        {

                listen 80

                server_name quanma.meyat.com

                index index.html index.htm index.php default.html default.htm default.php

                root /data/wwwroot/default/quanma/public/

                #error_page 404 /404.html

                location / {

                        index index.html index.php

                        if (-f $request_filename/index.html){

                                rewrite (.*) $1/index.html break

                        }

                        if (-f $request_filename/index.php){

                                rewrite (.*) $1/index.php

                        }

                        if (!-f $request_filename){

                                rewrite (.*) /index.php

                        }

                        try_files $uri $uri/ /index.php?$query_string

                }

                location ~ [^/]\.php(/|$)

                {

                        # comment try_files $uri =404to enable pathinfo

                        #try_files $uri =404

                        fastcgi_pass 127.0.0.1:9000

                        fastcgi_index index.php

                        include fastcgi_params

                        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name

                        fastcgi_split_path_info ^(.+?\.php)(/.*)$

                        set $path_info $fastcgi_path_info

                        fastcgi_param PATH_INFO $path_info

                        try_files $fastcgi_script_name =404

                        #include fastcgi.conf

                        #include pathinfo.conf

            }

            location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$

            {

                    expires 30d

            }

            location ~ .*\.(js|css)?$

            {

                    expires 12h

            }

            # Disallow access to .ht, .svn, .bzr, .git, .hg, .cvs directories

            location ~ /\.(ht|svn|bzr|git|hg|cvs) {

                    deny all

            }

            #access_log /date/nginx/bmp.com.conf/access.log main

}

这里我们介绍动态PV第一个案例,部署3个副本的nginx服务。主要学习 volumeClaimTemplate 属性。

statefulSet的三个组成部分:

1)Headless Service :名为nginx,用来定义Pod网络标识( DNS domain)。

2)StatefulSet :定义具体应用,名为Nginx,有三个Pod副本,并为每个Pod定义了一个域名。

3)volumeClaimTemplates : 存储卷申请模板,创建PVC,指定pvc名称大小,将自动创建pvc,且pvc必须由存储类供应。

为什么需要 headless service 无头服务?

在用Deployment时,每一个Pod名称是没有顺序的,是随机字符串,因此是Pod名称是无序的,但是在statefulset中要求必须是有序 ,每一个pod不能被随意取代,pod重建后pod名称还是一样的。而pod IP是变化的,所以是以Pod名称来识别。pod名称是pod唯一性的标识符,必须持久稳定有效。这时候要用到无头服务,它可以给每个Pod一个唯一的名称 。

为什么需要volumeClaimTemplate?

对于有状态的副本集都会用到持久存储,对于分布式系统来讲,它的最大特点是数据是不一样的,所以各个节点不能使用同一存储卷,每个节点有自已的专用存储,但是如果在Deployment中的Pod template里定义的存储卷,是所有副本集共用一个存储卷,数据是相同的,因为是基于模板来的 ,而statefulset中每个Pod都要自已的专有存储卷,所以statefulset的存储卷就不能再用Pod模板来创建了,于是statefulSet使用volumeClaimTemplate,称为卷申请模板,它会为每个Pod生成不同的pvc,并绑定pv, 从而实现各pod有专用存储。这就是为什么要用volumeClaimTemplate的原因。

rbac

nfsnginx/nfsrbac.yml。与前文保持一致。

nfsnginx/nfsnginxstorage.yml。与前文介绍类似,注意修改storageClass的名称

如果定义多个副本。必须使用volumeClaimTemplate属性。如果定义1个副本。可以使用pod+pvc方式。

nfsnginx/nginxstatefulset.yml


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/483112.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-06-09
下一篇2023-06-09

发表评论

登录后才能评论

评论列表(0条)

    保存