nginx作一个web服务器
一个负载均衡的服务器
做邮件代理服务器 用c++写的 性能非常好的
一.nginx安装与简单使用
1.下载nginx:
tar.gz文件 http://nginx.org/
解压到centos
2.安装nginx:
./configure --prefix=/usr/local/nginx
安装时可能错误提示:
./configure: error: the HTTP rewrite module requires the PCRE library.
安装pcre-devel与openssl-devel解决问题
yum -y install pcre-devel openssl openssl-devel
make
make install
3.启动nginx:
./sbin/nginx
4.查看nginx
ps aux|grep nginx
如果删除kill -9 1635
5.停止nginx:
./sbin/nginx -s stop
nginx模块从功能上划分三类:
handlers 处理器模块
proxies 代理类 upstream
Nginx模块主要有4种角色:
(1) core(核心模块):构建nginx基础服务、管理其他模块。
(2) handlers(处理模块): 用于处理HTTP请求,然后产生输出。
(3) filters(过滤模块): 过滤handler产生的输出。
(4) load-balancers(负载均衡模块):当有多于一台的后端备选服务器时,选择一台转发HTTP请求。
模块是如何被调用的?
当服务器启动,每个handlers(处理模块)都有机会映射到配置文件中定义的特定位置(location);
如果有多个handlers(处理模块)映射到特定位置时,只有一个会“赢”(说明配置文件有冲突项,应该避免发生)。
如果handlers(处理模块)把请求反向代理到后端的服务器,就变成另外一类的模块:load-balancers(负载均衡模块)。
负载均衡模块的配置中有一组后端服务器,当一个HTTP请求过来时,它决定哪台服务器应当获得这个请求。
Nginx的负载均衡模块采用两种方法:
轮转法,它处理请求就像纸牌游戏一样从头到尾分发;
IP哈希法,在众多请求的情况下,它确保来自同一个IP的请求会分发到相同的后端服务器。
如果handlers(处理模块)没有产生错误,filters(过滤模块)将被调用。
多个filters(过滤模块)能映射到每个位置,所以(比如)每个请求都可以被压缩成块。它们的执行顺序在编译时决定。
filters(过滤模块)是经典的“接力链表(CHAIN OF RESPONSIBILITY)”模型:一个filters(过滤模块)被调用,完成其工作,然后调用下一个filters(过滤模块),直到最后一个filters(过滤模块)。Nginx完成这个回复。
过滤模块链的特别之处在于,
每个filters(过滤模块)不会等上一个filters(过滤模块)全部完成;
它能把前一个过滤模块的输出作为其处理内容;有点像Unix中的流水线。
过滤模块能以buffer(缓冲区)为单位进行操作,这些buffer一般都是一页(4K)大小,当然你也可以在nginx.conf文件中进行配置。这意味着,比如,模块可以压缩来自后端服务器的回复,然后像流一样的到达客户端,直到整个回复发送完成。
总之,过滤模块链以流水线的方式高效率地向客户端发送响应信息。
nginx模块处理流程
客户端发送HTTP请求 –> Nginx基于配置文件中的位置选择一个合适的处理模块 ->(如果有)负载均衡模块选择一台后端服务器 –> 处理模块进行处理并把输出缓冲放到第一个过滤模块上 –> 第一个过滤模块处理后输出给第二个过滤模块 –> 然后第二个过滤模块又到第三个 –> 依此类推 –> 最后把回复发给客户端。
epoll异步非阻塞
同步:调用时,在没有得到结果之前不会返回,一旦调用之后就得到返回值。
异步:调用在发生之后,立马得到返回,返回没有结果。
同步导致了阻塞
异步可以让服务处于非阻塞状态
二.反向代理具体实现
1.主服务ip在网址执行后,自动执行 主服务ip:8080
[root@centos64 conf]# vi conf/nginx.conf 增加
server{
location/{
proxy_pass http://127.0.0.1:8080;
root html;
index index.html index.htm;
}
//重启nginx
[root@centos64 nginx]# ./sbin/nginx -s reload
2.一个主服务里配置两个子服务,子服务负载均衡。
主服务ip在网址执行后,以下两个链接会间隔的加载出现。
upstream demo {
server 127.0.0.1:8080;
server 192.168.72.1:8080;
}
server{
location/{
proxy_pass http://demo;
root html;
index index.html index.htm;
}
tomcat初始画面 tomcat7/webapps/root/index.html
3.动静分离:
location ~ .*\.(jpg|png|gif){ //正则匹配
root /user/local/images; //此文件下放入静态图片或静态文件1.png
}
//重启nginx
[root@centos64 nginx]# ./sbin/nginx -s reload
输入 主服务ip/1.png
4.一台服务器连接外网,两个域名都连接此服务器。
当两个域名绑定同一个主服务ip后,一个域名对应一个从服务进行访问。
upstream a {
server 192.168.72.1:8080;
}
upstream b {
server 127.0.0.1:8080;
}
server {
listen 80;
server_name www.a.com;
access_log logs/a.access.log;
location /{
proxy_pass http://a;
index index.html;
root html;
}
}
server {
listen 80;
server_name www.b.com;
access_log logs/b.access.log;
location /{
proxy_pass http://b;
index index.html;
root html;
}
}
C:\Windows\System32\drivers\etc\hosts 添加域名
192.168.92.129 www.a.com
192.168.92.129 www.b.com
5.PC和手机分离
同一个域名,显示不同服务样式
要想让网站适配PC和手机设备,首先要能做出准确的判断。
HTTP请求的Header中的User-Agent可以区分客户端的浏览器类型,
可以通过User-Agent来判断客户端的设备。
//声明变量
set $mobile_rewrite do_not_perform;
//判断访问者设备类型
if ($http_user_agent ~* "(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino") {
set $mobile_rewrite perform;
}
//判断访问者设备类型
if ($http_user_agent ~* "^(1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-)") {
set $mobile_rewrite perform;
}
if ($mobile_rewrite = perform) {
# 手机
}
//以上写在server里面
location / {
proxy_pass http://127.0.0.1:8080; # 电脑版
if ($mobile_rewrite = perform) {
proxy_pass http://192.168.72.1:8080; # 手机版
}
}
结合源码看nginx-1.4.0之nginx模块组织结构详解
http://www.cnblogs.com/didiaoxiong/p/3209767.html
- 大小: 48.6 KB
- 大小: 98.2 KB
- 大小: 46.2 KB
- 大小: 128.4 KB
- 大小: 159.4 KB
- 大小: 79.5 KB
分享到:
相关推荐
在Linux环境中,CentOS 7.6是一个广泛使用的操作系统,而Nginx是一款高性能的Web服务器和反向代理服务器,常用于网站托管和负载均衡。本文将详细介绍如何在CentOS 7.6上进行离线安装Nginx,这对于网络环境不稳定或者...
Linux系统下安装nginx-1.14.1所需的所有包 以及rpm依赖包,安装文档 https://blog.csdn.net/weixin_41851100/article/details/89565198
在Linux环境中,CentOS系统是常用的服务器操作系统,而Nginx是一款高性能的HTTP和反向代理服务器,常用于网站服务。在非root权限下安装Nginx,即不使用管理员权限进行安装,需要一些额外的步骤和技巧。下面将详细...
本教程将详细介绍如何在CentOS 7系统上离线部署Nginx,包括其依赖的几个关键库:GCC、PCRE、OpenSSL和Zlib。离线部署对于那些网络环境不稳定或者不允许在线安装的服务器来说尤为关键。 首先,GCC是GNU Compiler ...
CentOS 6 中搭建 Nginx 和部署 WordPress 项目 本资源摘要信息将为读者提供 CentOS 6 中搭建 Nginx 和部署 WordPress 项目的详细步骤和知识点。 一、Nginx 安装配置 1. 安装依赖包:在安装 Nginx 之前,需要安装 ...
在Linux环境中,特别是对于服务器操作...总之,离线安装Nginx在CentOS 6.x上需要手动处理更多细节,但通过下载源码包和依赖,并按照正确的步骤进行配置和编译,你可以成功地在无网络的环境中部署这个强大的Web服务器。
本教程将详细介绍如何在CentOS 7系统上离线部署Nginx,同时包括了依赖库如GCC、PCRE、OpenSSL和Zlib的安装过程。以下是一步一步的详细指南。 首先,我们需要理解Nginx的依赖关系。`gcc`是GNU Compiler Collection,...
在 CentOS 7 系统上部署 Nginx 有两种常见场景:一种是有网络连接的情况下安装,另一种是在离线环境中安装。 #### 二、准备工作 在安装 Nginx 之前,需要准备几个必要的依赖库: 1. **PCRE (Perl Compatible ...
在IT行业中,尤其是在服务器管理与部署的场景下,离线安装软件是一项常见但又具有挑战性的任务。在没有网络连接的环境中,确保软件及其依赖项的完整性和可用性至关重要。本篇文章将详细介绍如何在CentOS 7系统上离线...
在Linux系统,特别是CentOS 6和7这样的企业级操作系统中,部署Web服务器如Nginx是一项常见的任务。本文将详细介绍如何在没有网络连接的情况下,使用提供的离线安装包进行Nginx的安装,以及其依赖包PCRE、ZLIB和...
centos7离线部署nginx-docker,需要的可以下载免费公开,记录自己的一次学习 centos7离线部署nginx-docker,需要的可以下载免费公开,记录自己的一次学习
linux离线安装nginx-centos x86-64
这个自学教程覆盖了从下载RPM包到创建本地仓库和离线安装Nginx的整个流程,帮助你在没有互联网连接的CentOS 7系统上部署这个流行的Web服务器。通过实践这些步骤,你将深化对Linux包管理的理解,并掌握离线安装软件的...
在Linux系统,特别是CentOS 7中,Nginx是一个广泛应用的开源Web服务器,以其高性能、稳定性和灵活性而著名。Nginx的配置文件对于确保其正常运行和提供高效服务至关重要。下面我们将深入探讨在CentOS 7上安装和配置...
本文将详细介绍如何在CentOS7系统上,离线环境下安装nginx和keepalived,以实现主从热备负载均衡反向代理功能。 首先,我们关注的两个主要组件是`nginx`和`keepalived`。`nginx`是一款高性能的HTTP和反向代理服务器...
本主题聚焦于在CentOS 6.6操作系统上使用Nginx的离线安装包进行安装的过程。Nginx是一款高性能的HTTP和反向代理服务器,广泛应用于网站服务和负载均衡。 标题“nginx centos6.6离线安装包”表明我们讨论的是如何在...
为了节约成本,很多时候一台server 的nginx可能要部署多个前端的情况,本实例是在docker环境下部署两个前端,同时处理前端调用后端跨域问题,本示例为阿里云centos7 系统docker20.10.6环境下nginx1.19.5版本 ...
由于Nginx不在CentOS的默认仓库中,需要先安装EPEL软件仓库,然后通过`yum`命令安装Nginx。安装完成后,使用`systemctl`管理Nginx服务,包括启动、设置开机自启和检查服务状态。 配置Nginx是教程的重点之一。教程...