• 传统生意免责声明如何做

    做任何的社群营销或者销售任何产品,必须过滤掉一些胡搅蛮缠的人,必须把免责声明做到极致,

    保证所有人,都没办法找到您的漏洞,您的麻烦。

    任何人找您麻烦,过分了,您就可以起诉他。这就是免责声明的威力。我们不是什么人的生意都做。我们每句话都是真话,一味的索取者不是我们的客户群体,我们要找的是有智慧,智力高的人。您必须不断强调您要的客户是什么人,如此,越精准,您越赚钱,而且越具有品牌属性。

    付费后不退费,用完产品不保证每一个人都有效果。写的非常明确。

    讲清楚,自己是知识消费,培训消费,社群消费,由于是虚拟消费,所以不退费。是产品的,可以写明由于每一个人特别性质不同,所以无法保证一样的效果。

    免责声明做得越到位,越正式,资料齐全,公司名称齐全,公章齐全,出单率越高。

  • 传统生意在朋友圈内怎么搞图片

    朋友圈销售的是信任感!而图片是最容易产生信任感的,所谓无图无真相。不管你是做任何生意的,做朋友圈营销图片非常的重要,一张好的图片可以让潜在客户瞬间记住你的产品,你的服务,你的个人品牌,提升对你的信任感。

    1,好的图片都是贴近生活化的东西,贵在用心,我们不管走到哪里,看到好的人、事、物都可以拍照记录下来。我们创业的人生活跟工作其实就是一体的,本来就分不开。

    2,拍一些职业装、或者找个摄影师街拍,做 300 张质量高的图片。人们都喜欢赏心悦目的照片,这样的朋友圈看起来就是生活化而又不缺专业素养。能够更加获得他人的认可。

    3,社群成员聊天的截图、与客户沟通的截图、好的图片内容截图,各种截图。

    4,看到好吃的,好玩的,好看的都拍下来,作为图片素材库。

    5,自己的工作场景,生活化场景都是我们采集图片的对象,女朋友、家人、朋友的合影能出现在朋友圈信任度会更高。

    6,拒绝发布负能量、情绪化的图片。永远发正能量、有价值的图片。

    7、所有的图片上必须有一句广告词阐明你的业务,您的收费标准,您的付费方式,这是最简单也是最基本的营销。

  • 传统生意如何在朋友圈做自动成交?

    微信已经是一种生活方式,不管您是传统生意还是别的任何生意都可以在朋友圈做社群营销,如何通过朋友圈营销做自动成交产品和服务。

    1,自我介绍。朋友圈营销第一要素就是自我介绍,你是谁?你多大?你来自哪里?你是做什么的?你有什么故事?你的创业故事、奋斗故事。

    2,为什么要买你的产品或加入社群。你能提供什么价值和服务,加入社群的好处,比如你做化妆培训的,好处就是有讲课,有老师指导你学习化妆技巧。

    3,定位聚焦关键词。我们必须时刻清楚自己的定位。你是卖什么产品,提供什么服务,应该很清楚,比如说你是卖护肤产品,那你的客户就是注重保养的,那你的内容应该朝这个思路走,我们就要做个护肤专家。如果你提供的是虚拟产品,比如说英语培训,那你的文案图片视频都是围绕这个话题来讲。一定不能做两个以上的环节,比如你做护肤产品的又做英语线上培训,那你的标签属性就不明确,别人不知道你具体是做什么的。聚焦关键词,只做一个内容。

    4,您必须讲真话,每句话都是真的,你的文案、图片、视频全部都要是真实的。杜绝弄虚作假。

    5,朋友圈有您的家人,女朋友,老婆,父母,孩子,朋友,吃饭,您的成交率会更高。

    6,社群聊天图片,客户咨询截图,都要进行传播,对你的社群进行真实描述。比如群里有 500 人,200 人,100 人,进行真实描述。您卖什么,您就实际描述,买什么有什么具体的好处。

    7,广告里必须要有免责声明,也就是出现哪些情况不是您承担的责任,这必须告知您的客户,您的粉丝。免掉一切的麻烦。

    8,设置业务介绍封面背景图,搞一个文字版本的业务介绍,任何人加您,跟您聊天,最多聊三句话,然后就发布这个文字版的广告,图片版如果看得清楚也行,告诉他, 如果想加入社群,跟着老师学,就看看这个。

    9,真正的高手。是通过释放价值做广告,是通过组合拳做广告。一切广告,只针对富人,不针对穷人。针对耿直的人,不要给自己惹麻烦,切记切记,千万不要骗人。

    10,做人态度要极度诚恳,要勤奋,要尊重人,要有爱。

    11,竭尽全力搞外部流量,视频+音频不断的去释放价值吸引到你的朋友圈,不要局限于你身边的那点流量。只有真正认可你内容价值的人才是你的精准客户。

  • 传统项目放弃后做什么项目赚钱?

    项目很多,可以分实体项目、虚拟项目、虚实结合项目。

    很多人从来没想过,通过自媒体这条渠道突显自己的品牌价值、打造个人 IP。展现自己的专业,技能水平,其实只要你能突破自己,踏出第一步,你已经开始赚钱了。若有才华,更佳。

    在互联网上积累粉丝,别人就会为你买单。你看那些抖音上做泡妞的、恋爱的、做英语内容的……,无不是这种套路。

    自媒体转化产品,无论是实体产品还是虚拟产品,其实这都不重要了。重要的是有需求就有市场。

    1,实体项目可以按照我们的方法论,用我们的聚焦系统、30 循环系统、行动力系统去量化考核你的员工工作。

    2,虚拟项目可以选择靠我们社群内部的项目赚钱,创业社群、恋爱社群、微博社群项目都可以做。进相对于的 Vip 社群就可以参与,没有其他的成本。

    3,想继续做传统行业的,直接转型互联网化。用我们的 30 循环系统吸引外部流量,导入到你的微信朋友圈做自动成交。

    4,任何赚钱的项目本质上就是搞流量、做成交,我们提供的是可以直接落地操作的方法,解决流量的问题,成交的问题。

  • 传统实业如何搞合作

    传统生意老板大多是把所有的利润都抓到手里,越是这样越辛苦,越不赚钱。成功的人往往并不是自身能力有多牛逼,而是懂得借力搞合作。不是让自己成为一个巨人,而是站在巨人的肩膀上。

    1,任何生意的本质都是搞流量、做成交。没有流量何谈成交。一个人只要做好一个环节到极致已经很厉害了,其他的就一切外包找合作。

    2,前期做一个项目或者卖一个产品,你可以找合作着谈好分层,把售后或者产品交给别人来做,比如我们每天的任务就是做 30 个视频发出去搞流量,为了聚焦这一个环节疯狂的搞流量,我就把成交售后交给别人来做。

    3,找员工来给你做视频、做售后也算是合作,只是你是发工资给他们,并且还要懂得管理他们,不然他们不会卖力的给你干活。考核他们也是有没有一天完成一个 30 循环系统。所以没有管理能力的人就找有实力的人合作。谈好分层就好了,你会非常轻松。

    4,当你比较有财力后,你的合作系统可以更精细化,比如有专门做视频的、有专门负责搞图片的、有专门负责文案和作品上传的……..

    5,搞合作是为了专注于自己擅长的环节,聚焦做到极致,不是为了当甩手掌柜。完全什么都不做,什么都依靠别人,你会吃大亏。

    6,社会是有分工的,一个人永远干不过一个团队。如果你的团队里面有很多牛逼的合作者,你会变得更牛逼。

    7,传统生意老板还要懂得与自身建立的社群成员合作,让自己客户和粉丝成为您产品的传播者,代理商,而通过您少他多的方式让他们全力以赴为您裂变。

    8,记住,要想赚钱,一定是工作越简单越好,环节越少越好,只抓最有价值的工作,其它一切都是通过分成机制来完成。我们社群的合作是 91 分成,表面上看老师赚得特别少,但是有了影响力和自动传播的裂变,实则得到了很多,而合作者赚取了高利润,这叫各取所需,各作共赢。

  • 传统行业如何线下做流量?

    任何生意亏损或者倒闭本质都是缺少流量,也就是没有客户。传统行业要想在这个时代生存,必须懂得如何通过一些方式方法主动引流,而守株待兔的获客方式无异于坐以待毙。通过以下方法可以为传统实业更好的做线下导流:

    1、通过设置优惠券和会员卡的方式引流。传统实业门店的生意分为引流期,裂变期和锁客期。引流期的活动一定要大,给到客户超出想像的优惠,到店消费赠送优惠券,消费引导办理会员卡,会员卡的设置可用价格锚定效应,锚定一个主推的价格档次,通常是第二个价格阶梯为主推。

    2、社群裂变。前端的大量引流到一定程度,建立微信端社群,社群里设置各种互动,无利团财等,前期建立与粉丝的信任感,驱动粉丝主动传播达到大量裂变粉丝的目的。在些基础上再实现多种方式的盈利,可以从主营业务上延伸出多种盈利点。

    3、异业联盟。通过与一系列与自身所营业务相关的产业进行合作导流,资源共享达到双方共赢的目的。比如服装可以选择与美容美体,鞋类门店合作,餐饮可与水果,超市等实业合作。

    4、招牌款引流。招牌爆款让利,可在一周内设置固定时间段,无利出售或者搭配一些捆绑销售甚至免费等等,根据不同的行业性质来划分,目的是为了人气,记住,所有的实业都是先有流量和人气再有财气。

    5、砸广告。差异化卖点打造,让人过目不忘的广告词非常重要。但这项成本较高,对一些没有财力基础的老板不建议使用。互联网时代免费广告宣传的渠道很多,各位老板在投入的时候务必计算产出。

  • 自媒体如何转化产品

    1,实体项目可以按照我们的方法论,用我们的聚焦系统、30 循环系统、行动力系统去量化考核你的员工工作。

    2,虚拟项目可以选择靠我们社群内部的项目赚钱,创业社群、恋爱社群、微博社群项目都可以做。进相对于的 Vip 社群就可以参与,没有其他的成本。

    3,想继续做传统行业的,直接转型互联网化。用我们的 30 循环系统吸引外部流量,导入到你的微信朋友圈做自动成交。

    4,任何赚钱的项目本质上就是搞流量、做成交,我们提供的是可以直接落地操作的方法,解决流量的问题,成交的问题。

  • 传统项目放弃后做什么项目赚钱?

    项目很多,可以分实体项目、虚拟项目、虚实结合项目。

    很多人从来没想过,通过自媒体这条渠道突显自己的品牌价值、打造个人 IP。展现自己的专业,技能水平,其实只要你能突破自己,踏出第一步,你已经开始赚钱了。若有才华,更佳。

    在互联网上积累粉丝,别人就会为你买单。你看那些抖音上做泡妞的、恋爱的、做英语内容的……,无不是这种套路。

  • 传统实业如何让收入翻几翻

    1、当您一个人能干出月入十万的时候,您要开始用这套方法将项目放大。比如您可以有团队一天有十个人帮您做 30 循环系统。那么您就拥有了原来十倍的流量。

    2、您有一个五百人的社群,您完全搞懂了如何运营互动裂变,您可以用利益交换让群员帮您裂变出第二个,第三个,第十个 500 人的大群,将项目放大。

    3、聚焦一个环节,也就是互联网音频,视频搞流量。

    4、30 循环系统是什么?就是日日 30 个视频,或者音频。

    10 个账号操作,每个账号 3 个视频,或者音频,日日夜夜上传。

  • 传统实业如何为您的产品搞广告

    做任何生意都离不开打广告,你永远都在释放价值,却不告诉别人你在做什么,能提供什么样的产品和服务,那毫无意义。你永远都在说你的产品多好多好,多便宜,只会招来方案甚至屏蔽。谁跳出来都说他的产品特别好特别牛,那我为什么要找你买。其实这个时代不缺好的产品,缺的好的营销广告。

    1,高明的广告是让你看不出来是广告,广告本质是越软越好。观众看得津津有味,看到最后一回味才知道原来是个广告,心里面是佩服是认同,通俗说就是你的内容很有价值感,别人喜欢看,你只是在不起眼的地方恰到好处的留了一句话广告。

    2,我们的广告一定要从内容上下功夫,江小白为什么那么火,就是它的文案内容很牛逼。我们做朋友圈营销也要走这样的模式,永远是好的文案+一句话广告+图片。

    3,好的文案怎么写,就是内容要足够干,没有废话,让别人看了有价值感、有认同感。可以去到各大平台,比如百度搜索相关的素材,改编成自己的。比如你是做护肤的,你就搜护肤小知识,跳出来的内容多得不行,整理好做成一段或一篇文案即可。

    4,一句话话广告怎么写。一句话广告只需要介绍你的产品和服务就可以了,比如说,怕上火喝王老吉、老白金,健康品,年轻态……,但是我们可以更直接一点,你是做化妆社群的,可以写成“付费 500 邀你进 VIP 群学化妆,解决每天化妆的烦恼”。

    5,一句话广告就是加在你优质的文案最后,或者加在优质的图片上就可以了。直接发硬广告是愚蠢的行为。

NGINX 简明使用教程

云原生 JackLeon 1周前 (04-12) 24次浏览 0个评论 扫描二维码

NGINX 简明使用教程关于本书NGINX Tutorial 是一本关于 NGINX 学习的开源书。利用业余时间写了本书,图文并茂,用大量实例带你一步一步走进 NGINX 的世界。如有疏漏欢迎指正,欢迎提问。感谢您的参与!什么是 NGINXNGINX [engine x] 是一款来自俄罗斯的高性能的 HTTP 和反向代理(reverse proxy)服务器、邮件服务器,以及通用的 TCP/UDP 代理服务器,被业界广泛采用,包括Netflix、Wordpress、FastMail 等。它具有有很多非常优越的特性:作为 Web 服务器:相比 Apache,NGINX 使用更少的资源,支持更多的并发连接,体现更高的效率,这点使 NGINX 尤其受到虚拟主机提供商的欢迎;作为负载均衡服务器:NGINX 既可以在内部直接支持 Rails 和 PHP,也可以支持作为 HTTP 代理服务器 对外进行服务。NGINX 用 C 编写,系统资源开销小, CPU 使用效率高;作为邮件代理服务器: NGINX 同时也是一个非常优秀的邮件代理服务器(最早开发这个产品的目的之一也是作为邮件代理服务器)。目录简介下载、安装、运行Hello World! 作为 HTTP 服务器配置服务器名称配置 HTTPS 服务器作为 HTTP 负载均衡器压缩与解压

NGINX 简明使用教程

NGINX 简介

什么是 NGINX

NGINX是一个免费的、开源的、高性能的 HTTP 服务器和反向代理,以及一个 IMAP/POP3 代理服务器。 NGINX以其高性能、稳定性、丰富的功能集、简单的配置和低资源消耗而闻名。NGINX 是为解决C10K 问题而编写的少数服务器之一。与传统服务器不同,NGINX 不依赖于线程来处理请求。相反,它使用更加可扩展的事件驱动(异步)架构。这种架构在负载下使用小的但更重要的是可预测的内存量。即使您不希望处理数千个并发请求,您仍然可以从 NGINX 的高性能和小内存中获益。 NGINX 在各个方向扩展:从最小的 VPS 一直到大型服务器集群。
所谓 C10K 问题,指的是服务器同时支持成千上万个客户端的问题,也就是"Concurrent 10000 Connection"(这也是c10k这个名字的由来)。由于硬件成本的大幅度降低和硬件技术的进步,如果一台服务器同时能够服务更多的客户端,那么也就意味着服务每一个客户端的成本大幅度降低,从这个角度来看,C10K 问题显得非常有意义。
NGINX拥有诸如 Netflix、Hulu、Pinterest、CloudFlare、Airbnb、WordPress.com、GitHub、SoundCloud、Zynga、Eventbrite、Zappos、Media Temple、Heroku、RightScale、Engine、Yard、MaxCDN 等众多高知名度网站。 。NGINX 它具有有很多非常优越的特性:
  • 作为 Web 服务器:相比 Apache,NGINX 使用更少的资源,支持更多的并发连接,体现更高的效率,这点使 NGINX 尤其受到虚拟主机提供商的欢迎;
  • 作为负载均衡服务器:NGINX 既可以在内部直接支持 Rails 和 PHP,也可以支持作为 HTTP 代理服务器 对外进行服务。NGINX 用 C 编写,系统资源开销小, CPU 使用效率高;
  • 作为邮件代理服务器: NGINX 同时也是一个非常优秀的邮件代理服务器(最早开发这个产品的目的之一也是作为邮件代理服务器)。

下载、安装、运行

下载

NGINX 下载地址为:http://nginx.org/en/download.html

安装

Linux 和 BSD 的预构建软件包

大多数 Linux 发行版和 BSD 版本在通常的软件包存储库中都有 NGINX,它们可以通过任何通常用于安装软件的方法进行安装,如在 Debian 平台使用 apt-get,在 Gentoo 平台使用 emerge,FreeBSD 平台使用 ports等。请注意,这些软件包通常有些过时。 如果您想要最新的功能和错误修复,建议从源代码或直接从 nginx.org 使用软件包。

Red Hat/CentOS

首先添加 NGINX 的 yum 库,接着创建名为/etc/yum.repos.d/nginx.repo 的文件,并粘贴如下配置到文件中:

CentOS

[nginx]name=nginx repobaseurl=http://nginx.org/packages/centos/$releasever/$basearch/gpgcheck=0enabled=1

RHEL

[nginx]name=nginx repobaseurl=http://nginx.org/packages/rhel/$releasever/$basearch/gpgcheck=0enabled=1由于CentOS、RHEL 和 Scientific Linux 之间填充$releasever变量的差异,有必要根据您的操作系统版本手动将$releasever变量的替换为5(5.x)或6(6.x))。

Debian/Ubuntu

Ubuntu:

此分发页面http://nginx.org/packages/ubuntu/dists/?_ga=2.38823467.966088998.1495254706-741278569.1494679454列出了可用的N GINX Ubuntu 版本支持。 有关Ubuntu版本映射到发布名称,请访问官方 Ubuntu 版本页面https://wiki.ubuntu.com/Releases。在/etc/apt/sources.list中附加适当的脚本。 如果担心存储库添加的持久性(即DigitalOcean Droplets),则可以将适当的部分添加到/etc/apt/sources.list.d/下的其他列表文件中,例如/etc/apt/sources.list.d/nginx.list## Replace $release with your corresponding Ubuntu release.deb http://nginx.org/packages/ubuntu/ $release nginxdeb-src http://nginx.org/packages/ubuntu/ $release nginx比如 Ubuntu 16.04 (Xenial) 版本,设置如下:deb http://nginx.org/packages/ubuntu/ xenial nginxdeb-src http://nginx.org/packages/ubuntu/ xenial nginx要想安装,执行如下脚本:
sudo apt-get updatesudo apt-get install nginx
安装过程如果有如下的错误:
W: GPG error: http://nginx.org/packages/ubuntu xenial Release: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY $key
则执行下面命令:## Replace $key with the corresponding $key from your GPG error.sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys $keysudo apt-get updatesudo apt-get install nginx

Debian 6

添加下面脚本到/etc/apt/sources.list:deb http://nginx.org/packages/debian/ squeeze nginxdeb-src http://nginx.org/packages/debian/ squeeze nginx

Ubuntu PPA

这 个PPA 由志愿者维护,不由 nginx.org 分发。 由于它有一些额外的编译模块,所以可能更适合您的环境。您可以从 Launchpad上 的NGINX PPA 获取最新的稳定版本的 NGINX。您将需要具有root权限才能执行以下命令。Ubuntu 10.04 及更新版本:sudo -snginx=stable # use nginx=development for latest development versionadd-apt-repository ppa:nginx/$nginxapt-get updateapt-get install nginx如果有关于add-apt-repository的错误,则可能先要安装python-software-properties。对于其他基于 Debian/Ubuntu 的发行版,您可以尝试使用最可能在旧版套件上工作的 PPA 的变体:sudo -snginx=stable # use nginx=development for latest development versionecho "deb http://ppa.launchpad.net/nginx/$nginx/ubuntu lucid main" > /etc/apt/sources.list.d/nginx-$nginx-lucid.listapt-key adv --keyserver keyserver.ubuntu.com --recv-keys C300EE8Capt-get updateapt-get install nginx

Win32

安装命令为:cd c:\unzip nginx-1.13.0.zipren nginx-1.13.0 nginxcd nginxstart nginx如果有那问题,可以参看日志 c:nginxlogserror.log。此外,目前,NGINX 官网只提供了 32位的安装包,如果想安装 64位的版本,可以查看由 Kevin Worthington 维护 Windows 版本 https://kevinworthington.com/nginx-for-windows/

验证安装

NGINX 正常启动后会占用 80 端口。打开任务管理器中,能够看到相关的 NGINX 活动线程。打开浏览器,访问http://localhost:80 (其中 80 端口号可以省略)就能看到 NGINX 的欢迎页面。关闭 NGINX 执行:nginx -s stop

控制语句

NGINX 启动后,有一个主进程(master process)和一个或多个工作进程(worker process),主进程的作用主要是读入和检查NGINX的配置信息,以及维护工作进程;工作进程才是真正处理客户端请求的进程。具体要启动多少个工作进程,可以在 NGINX 的配置文件nginx.conf中通过worker_processes指令指定。 可以通过以下这些命令来控制 NGINX:
nginx -s [ stop | quit | reopen | reload ]
其中:
  • nginx -s stop: 强制停止NGINX,不管工作进程当前是否正在处理用户请求,都会立即退出。
  • nginx -s quit:“优雅地”退出NGINX,执行这个命令后,工作进程会将当前正在处理的请求处理完毕后,再退出。
  • nginx -s reload:重载配置信息。当NGINX的配置文件改变之后,同过执行这个命令,使更改的配置信息生效,而无需重新启动nginx.
  • nginx -s reopen:重新打开日志文件。
当重载配置信息时,NGINX 的主进程首先检查配置信息,如果配置信息没有错误,主进程会启动新的工作进程,并发出信息通知旧的工作进程退出,旧的工作进程接收到信号后,会等到处理完当前正在处理的请求后退出。如果nginx检查配置信息发现错误,就会回滚所做的更改,沿用旧的工作进程继续工作。

Hello World! 作为 HTTP 服务器

按照编程惯例,我们要编写第一个“Hello World”应用案例。该案例是使用 NGINX 来作为 HTTP 服务器。众所周知, NGINX 一款高性能的 HTTP 服务器。

编写示例代码

我们新建了一个“hello-world”目录,用作我们的项目目录。在该目录下,新建一个 index.html 静态页面,页面内容如下:<!DOCTYPE html><html><head><meta charset="UTF-8"><title>Hello World</title></head><body> <h1>Hello World!</h1> <p>柳伟卫/老卫/Way Lau's Personal Site - 关注编程、系统架构、性能优化</p> <p>  Welcome to <a href="https://waylau.com">waylau.com</a>. </p></body></html>页面内容非常简单,我们只是考虑如何将这个静态页面在 NGINX 上进行部署。

部署项目

在 NGINX 的按照目录下,我们能找到html目录,该目录就是用于部署静态页面。在该目录下,事先已经有了几个演示页面:├─html│      50x.html│      index.html也可以删除,或者保留该演示页面。我们将“hello-world”项目复制到html目录下。此时,整个目录情况如下:├─html│  │  50x.html│  │  index.html│  ││  └─hello-world│          index.html

验证

NGINX 正常启动后会占用,打开浏览器,访问http://localhost/hello-world/index.html 就能看到我们编写的项目的页面。

配置服务器名称

服务器名称是用server_name指令来定义的,并且它决定了哪一个server块将用来处理给定的请求。可以使用精确名称、通配符、正则表达式来定义服务器名称。
server { listen 80; server_name example.org www.example.org; ...}server { listen 80; server_name *.example.org; ...}server { listen 80; server_name mail.*; ...}server { listen 80; server_name ~^(?<user>.+)\.example\.net$; ...}
当寻找一个虚拟服务器的名字,如果指定的名称匹配多个变量,例如,通配符和正则表达式都匹配,将会按照以下的顺序选择第一个匹配的变量:
  • 精确名称
  • 以星号()开头的最长的通配符,例如“.example.org”
  • 以星号()结尾的最长的通配符,例如“mail.
  • 第一个匹配的正则表达式(根据在配置文件中出现的顺序)

通配符名称

通配符名称包含的星号()只能在名称的开头或结尾,并且只能在点号(.)的边上。像“www..example.org”和“w*.example.org”都是不可用的。然而,这样的名称可以使用正则表达式来指定,例如,“^www..+.example.org$” 和 “^w..example.org$”。星号可以匹配好几个名称部分。“.example.org”不仅能匹配www.example.org,还能匹配www.sub.example.org。一种特殊形式的通配符“.example.org”可以用来匹配精确名称“example.org”和通配符“*.example.org”。

正则表达式名称

NGINX 中使用的正则表达式兼容 Perl 编程语言中的正则表达式(PCRE)。使用正则表达式时,服务器名称必须使用波浪线(~)开头:
server_name ~^www\d+\.example\.net$;
要不然就会被当做精确名称对待,或者如果包含星号(*)的话,会被当成通配符(当然多数情况下会被当成不可用的)。在正则表达式中不要忘记使用“^”和"$"标记,并不是语法上的要求,而是逻辑上的要求。同时还要记住,域名中的点号(.)之前要加反斜杠转义。如果正则表达式中包含中括号“{”和“}”,需要用引号括起来:
server_name "~^(?<name>\w\d{1,3}+)\.example\.net$";
要不然 NGINX 会启动失败并且显示错误信息:
directive "server_name" is not terminated by ";" in ...
指定正则表达式捕获片段之后可以当做一个变量来使用:
server { server_name ~^(www\.)?(?<domain>.+)$; location / { root /sites/$domain; }}
PCRE库支持以下语法使用捕获片段:
  • ?<name>: Perl 5.10兼容语法,从PCRE-7.0开始支持
  • ?'name': Perl 5.10兼容语法,从PCRE-7.0开始支持
  • ?P<name>: Python兼容语法,从PCRE-4.0开始支持
如果 NGINX 启动失败,并且显示错误信息:
pcre_compile() failed: unrecognized character after (?< in ...
这就意味着PCRE库太老了,这种语法“?P”应该被替换。捕获片段也可以使用数字形式引用:
server { server_name ~^(www\.)?(.+)$; location / { root /sites/$2; }}
然而,这种使用方式尽量限制在简单案例中使用(就像上面这样),因为数字引用形式很容易被覆盖。

混杂名称

有些服务器名称被区别对待。如果没有“Host”头信息的请求需要被一个不是默认的server块处理,一个空的名称要被指定:
server { listen 80; server_name example.org www.example.org ""; ...}
如果在一个server块中没有server_name被指定,NGINX 会使用空名称作为服务器名称。
在NGINX 0.8.48之前的版本中,机器的hostname(主机名称)会被用作服务器名称。
如果服务器名称被定义成“$hostname”(从0.9.4版开始),机器的hostname(主机名称)会被使用。如果处理请求时想使用IP地址代替服务器名称,“Host”请求头会包含IP地址,并且会把IP地址当做服务器名称来处理请求:
server { listen 80; server_name example.org www.example.org "" 192.168.1.1 ; ...}
万能服务器示例中可以看到奇怪的名字“_”:
server { listen 80 default_server; server_name _; return 444;}
这个名称并不奇怪,这只是众多的与真实名称永远不会相交的无效域名中的一个。其他的无效名称像“— —”和“!@#”也可以同样适用。NGINX 0.6.25之前的版本支持特殊的名称“”,这被错误地解释为万能的名称。它从来都不具备万能的或通配符名称的功能。作为替代,它之前提供的功能现在被“server_name_in_redirect”指令取代。特殊名称“”现在已经不建议使用了,而建议使用“server_name_in_redirect”指令。请注意使用“server_name”指令没有办法指定万能名称或默认服务器。这是“listen”指令的属性而不是“server_name”指令的属性。可以在*:80*:8080上监听,一个将*:8080端口设为默认,另一个将*:80端口设为默认:
server { listen 80; listen 8080 default_server; server_name example.net; ...}server { listen 80 default_server; listen 8080; server_name example.org; ...}

优化

精确名称,以星号开头的通配符,以星号结尾的通配符被存储在绑定到监听端口上的三张哈希表中。哈希表的大小在配置阶段被优化,因此一个名称在最少CPU缓存空隙被找到。精确名称的哈希表最先被搜索。如果没找到一个名字,接着以星号开头的通配符哈希表会被搜索。如果还没找到,以星号结尾的哈希表才会被搜索。搜索通配符名称的哈希表速度会比搜索精确名称的哈希表慢,因为名称是根据域名部分搜索的。记住,这种特殊的通配符形式“.example.org”是存储在通配符名称的哈希表中而不是存储在精确名称的哈希表中。正则表达式会被按序测试,因为它是最慢的并且不可伸缩。基于这些原因,尽可能使用精确名称会更好。例如,最经常被请求的服务器名称是example.orgwww.example.org,像下面这样定义会更高效:
server { listen 80; server_name example.org www.example.org *.example.org; ...}
比这种形式更高效:
server { listen 80; server_name .example.org; ...}
如果大量的服务器名称被定义,或者特别长的服务器名称被定义,在http块中使用server_names_hash_max_sizeserver_names_hash_bucket_size就显得有必要了。根据CPU缓存行的大小,默认的server_names_hash_bucket_size指令的值可能是32、64或其他值。如果默认值是32,服务器名称被定义为too.long.server.name.example.org,NGINX 就会启动失败并显示错误信息:
could not build the server_names_hash,you should increase server_names_hash_bucket_size: 32
在这种情况下,这个指令的值应该增加到两倍的值:
http { server_names_hash_bucket_size 64; ...
如果是大量的服务器名称被定义,另一个错误信息会显示:
could not build the server_names_hash,you should increase either server_names_hash_max_size: 512or server_names_hash_bucket_size: 32
在这种情况下,首先尝试去设置server_names_hash_max_size的值接近于服务器名称的数量。只有当这种情况无效时,或者 NGINX 的启动时间太长无法接受,再去增大server_names_hash_bucket_size。如果一个端口上只定义了一个服务器名称,那么 NGINX 就不会再去测试服务器名称了(也不会在端口上建立哈希表)。然而,有一种例外的情况。如果服务器名称是带有捕捉片段的正则表达式,那么必须去执行表达式获取捕捉片段。

配置 HTTPS 服务器

HTTPS(Hyper Text Transfer Protocol over Secure Socket Layer)是基于 SSL/TLS 安全连接的 HTTP 协议。HTTPS 是通过 SSL/TLS 提供的数据加密、身份验证和消息完整性验证等安全机制,来为 Web 访问提供了安全性保证,并广泛应用于网上银行、电子商务等领域。近年以来,在主要互联网公司和浏览器开发商的推动之下,HTTPS 在加速普及,而 HTTP 正在被加速淘汰。不加密的 HTTP 连接是不安全的,数据能在传输过程中被任何中间人能轻易地读取和操纵。本章节将演示如何将 NGINX 配置为 HTTPS 服务器。

修改 nginx.conf

修改 conf/nginx.conf 文件,必须在配置文件 server 块中的监听指令 listen 后启用 ssl 参数,并且指定服务器证书 ssl_certificate 和私钥 ssl_certificate_key 的位置:
server { listen 443 ssl; server_name www.example.com; ssl_certificate www.example.com.crt; ssl_certificate_key www.example.com.key; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers HIGH:!aNULL:!MD5; ...}
服务器证书是一个公共实体,它被发送给连接到服务器的每一个客户机。私钥是一个安全实体,应该存储在具有受限访问的文件中,但它必须可被nginx主进程读取。私钥也可以存储在与服务器证书相同的文件中:
ssl_certificate www.example.com.cert; ssl_certificate_key www.example.com.cert;
在这种情况下,这个证书文件的访问权限也应受到限制。虽然证书和密钥存储在一个文件中,但只有证书被发送到客户端。指令 ssl_protocols 和 ssl_ciphers 可用于限制仅包括强版本和密码的 SSL/TLS 连接。 默认情况下,NGINX 使 用ssl_protocols TLSv1 TLSv1.1 TLSv1.2版本和ssl_ciphers HIGH:!aNULL:!MD5密码,因此通常不需要显式地配置它们。需要注意的是,这些指令的默认值在不同的版本里面已经变更好几次了。如果想确认下不同版本的默认值,请参阅http://nginx.org/en/docs/http/configuring_https_servers.html#compatibility

HTTPS 服务器优化

SSL 操作会消耗额外的 CPU 资源。 在多处理器系统上,应该运行不少于可用 CPU 内核数的多个 工作进程 。最耗 CPU 的操作是 SSL 握手。有两种方法来最小化每个客户端执行这些操作的次数:
  • 启用 keepalive_timeout参数。来让这些 keepalive 的连接在一个连接中发送多个请求
  • 重用 SSL 会话参数。可以避免并行和后续连接的 SSL 握手。这些会话存储在 NGINX 工作程序的共享 SSL 会话缓存中,并由ssl_session_cache指令配置。 1M 的高速缓存包含大约4000个会话。默认的缓存超时时间为5分钟,可以通过使用ssl_session_timeout配置来增大。 下面是针对具有 10M 共享缓存的多核心系统的优化示例配置:
worker_processes auto;http { ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; server { listen 443 ssl; server_name www.example.com; keepalive_timeout 70; ssl_certificate www.example.com.crt; ssl_certificate_key www.example.com.key; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers HIGH:!aNULL:!MD5; ...

SSL 证书链

有些浏览器可能警示由知名证书颁发机构签名的证书,而其他浏览器却能无问题的接受这些证书。这是因为这些证书颁发机构使用了中间证书来签署服务器证书,所签署的证书不存在于特定浏览器发行时内置的可信证书颁发机构颁发的证书库中。在这种情况下,颁发机构提供一组与颁发的服务器证书(根证书)串接的捆绑证书,并让服务器证书(根证书)出现在合并后文件(证书链)的捆绑证书之前:$ cat www.example.com.crt bundle.crt > www.example.com.chained.crt生成的证书链文件应该放在 ssl_certificate配置中:
server { listen 443 ssl; server_name www.example.com; ssl_certificate www.example.com.chained.crt; ssl_certificate_key www.example.com.key; ...}
如果根证书和捆绑证书使用了错误的链接顺序,NGINX 将会启动失败并显示如下错误信息:SSL_CTX_use_PrivateKey_file(" ... /www.example.com.key") failed   (SSL: error:0B080074:x509 certificate routines:    X509_check_private_key:key values mismatch)这是因为 NGINX 尝试去使用私钥与捆绑后证书的第一个证书验证而不是它本该去验证的服务器证书。浏览器通常会存储他们接收到的由可信证书颁发机构签发的中间证书,因此被活跃使用的浏览器可能已经拥有所需的中间证书,这样证书即使没有捆绑到证书链也不会有问题。为了确保服务器发送的是完整的证书链,可以使用 openssl命令行来查看,例如:$ openssl s_client -connect www.godaddy.com:443...Certificate chain 0 s:/C=US/ST=Arizona/L=Scottsdale/1.3.6.1.4.1.311.60.2.1.3=US     /1.3.6.1.4.1.311.60.2.1.2=AZ/O=GoDaddy.com, Inc     /OU=MIS Department/CN=www.GoDaddy.com     /serialNumber=0796928-7/2.5.4.15=V1.0, Clause 5.(b)   i:/C=US/ST=Arizona/L=Scottsdale/O=GoDaddy.com, Inc.     /OU=http://certificates.godaddy.com/repository     /CN=Go Daddy Secure Certification Authority     /serialNumber=07969287 1 s:/C=US/ST=Arizona/L=Scottsdale/O=GoDaddy.com, Inc.     /OU=http://certificates.godaddy.com/repository     /CN=Go Daddy Secure Certification Authority     /serialNumber=07969287   i:/C=US/O=The Go Daddy Group, Inc.     /OU=Go Daddy Class 2 Certification Authority 2 s:/C=US/O=The Go Daddy Group, Inc.     /OU=Go Daddy Class 2 Certification Authority   i:/L=ValiCert Validation Network/O=ValiCert, Inc.     /OU=ValiCert Class 2 Policy Validation Authority     /CN=http://www.valicert.com//emailAddress=info@valicert.com...在本示例中, www.GoDaddy.com 证书链中的 #0 号证书的证书请求者("s")由签发者("i")签发,而签发者("i")本身又是 #1 号证书的请求者("s"),它的证书签发者是 #2 号证书的请求者,它请求的证书由知名发布者 ValiCert 公司 签发,其证书存储在浏览器的内置证书库中。如果捆绑证书没有被添加到证书链,那只有 #0 号证书会被展示出来。

单个 HTTP/HTTPS 虚拟主机

现在,在单个 NGINX 虚拟主上可以配置同时处理 HTTP 和 HTTPS 请求:
server { listen 80; listen 443 ssl; server_name www.example.com; ssl_certificate www.example.com.crt; ssl_certificate_key www.example.com.key; ...}
在0.7.14之前的版本无法向上面那样为单个侦听套接字选择性启用SSL,而只能使用ssl指令为整个服务器启用 SSL,从而无法设置单个 HTTP/HTTPS 虚拟主机服务器,所以在 listen指令后增加了ssl 参数来解决此问题。因此不建议在现代版本中使用 ssl 这个指令。

基于名称的 HTTPS 服务器

当配置两个或多个HTTPS虚拟主机服务器侦听同一个 IP 地址时会出现常见问题:
server { listen 443 ssl; server_name www.example.com; ssl_certificate www.example.com.crt; ...}server { listen 443 ssl; server_name www.example.org; ssl_certificate www.example.org.crt; ...}
使用这种配置,浏览器接收默认服务器的证书,即"www.example.com" 而不管请求的实际服务器名称,这是由SSL协议行为造成的。 SSL连接建立在浏览器发送 HTTP 请求之前,这时候 NGINX 还不知道请求的服务器名称。因此,它只能提供默认的服务器证书。解决此问题最古老和最可靠的方法是为每个 HTTPS 虚拟主机服务器指定一个单独的IP地址:
server { listen 192.168.1.1:443 ssl; server_name www.example.com; ssl_certificate www.example.com.crt; ...}server { listen 192.168.1.2:443 ssl; server_name www.example.org; ssl_certificate www.example.org.crt; ...}

包含多个名称的 SSL 证书

还有其他方法允许在几个HTTPS虚拟主机服务器之间共享单个IP地址。然而,他们都有自己的缺点。其中一种方法是在证书的 SubjectAltName 字段中使用多个名称,例如 www.example.com 和 www.example.org 。 但是, SubjectAltName 字段长度有限。另一种方法是使用带有通配符名称的证书,例如 *.example.org 。 通配符证书能保护指定域的所有子域,但只限一个级别。此证书与 www.example.org 匹配,但不匹配 example.org 和 www.sub.example.org 。这两种方法也可以结合。证书可以在 SubjectAltName 字段中包含完全匹配和通配符名称,例如 example.org 和 *.example.org 。最好在配置文件的 http区块中放置具有多个名称的证书文件及其私钥文件,以在所有其下的虚拟主机服务器中继承其单个内存副本:
ssl_certificate common.crt;ssl_certificate_key common.key;server { listen 443 ssl; server_name www.example.com; ...}server { listen 443 ssl; server_name www.example.org; ...}

服务器名称指示

单个 IP 地址上运行多个 HTTPS 虚拟服务器的更通用的解决方案是 TLS 服务器名称指示扩展 (SNI,RFC 6066),其允许浏览器在 SSL 握手期间同时发送请求的服务器名称,因此,服务器就知道它应该给这个连接使用哪个证书。然而,SNI 限制了它支持的浏览器。 目前支持从以下浏览器版本及其后的版本:
  • Opera 8.0;
  • IE 7.0 (Windows Vista及更高版本);
  • Firefox 2.0 及其他使用 Mozilla Platform rv:1.8.1 的浏览器;
  • Safari 3.2.1 (Windows版本支持Windows Vista及更高版本);
  • Chrome (Windows版本支持Windows Vista及更高版本).
只有域名可以在 SNI 中传递,然而如果请求包含 IP 地址,一些浏览器可能错误地把服务器的 IP 地址作为其名称进行传递,我们不能依赖于这个。为了在nginx中使用 SNI,必须在构建 NGINX 的 OpenSSL 库以及运行时的动态链接库中支持它。OpenSSL从0.9.8f版本支持SNI,如果在编译时给config增加了 --enable-tlsext 选项;从OpenSSL 0.9.8j版本开始默认启用此选项。如果NGINX是以支持SNI方式构建的,当使用“-V”参数运行时,NGINX 会显示这一信息:
$ nginx -V...TLS SNI support enabled...
但是,如果启用 SNI 的 NGINX与没有 SNI 支持的 OpenSSL 库动态链接,NGINX 将显示警告:
nginx was built with SNI support, however, now it is linkeddynamically to an OpenSSL library which has no tlsext support,therefore SNI is not available

作为 HTTP 负载均衡器

跨多个应用程序实例的负载均衡是优化资源利用率,最大限度地提高吞吐量,降低延迟,并确保容错配置一个常用的技术。可以使用 NGINX 作为非常有效的 HTTP 负载平衡器,将流量分配给多个应用服务器,并通过 NGINX 提高 Web 应用程序的性能、可扩展性和可靠性。

负载均衡的方法

¥2查看全文 购买VIP查看全站
喜欢 (0)
[1186664388@qq.com]
分享 (0)
关于作者:
创享视界(creativeview.cn)是一个带动全民颠覆八小时工作制,通过投稿把自己的创意智慧变现的方式创造被动收入,从而实现财务自由的平台。我们相信,创新思维不仅有助于打造更出色的产品,还可以让世界变得更美好,让人人受益。
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
%d 博主赞过: