1.HTTP服务器

Nginx是一个HTTP服务器,可以将服务器上的静态文件(如HTML、图片)通过HTTP协议展现给客户端。

2.反向代理服务器

Nginx也是反向代理服务器。

说反向代理之前先说一下正向代理,正向代理相信很多大陆同胞都在这片神奇的土地上用过了。就是访问国外网被墙了,然后找个代理服务,通过该服务器访问国外网站,这个是正向代理。

反向代理是 客户端访问代理服务器,但是代理服务器没有用户需要的资源,然后代理服务器偷偷访问应用服务器,获取资源返回给用户,用户不知道代理服务器是访问了应用服务器,代理服务器也隐藏了应用服务器的url。(反向代理的典型用途是将 防火墙后面的服务器提供给Internet用户访问)

3.负载均衡

Nginx可以通过反向代理来实现负载均衡。


二、Nginx 安装

2.1 CentOS 7 安装 Nginx

2.1.1.添加Nginx到YUM源

添加CentOS 7 Nginx yum资源库,打开终端,使用以下命令:

sudo rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

2.2.2.安装Nginx

在你的CentOS 7 服务器中使用yum命令从Nginx源服务器中获取来安装Nginx:

sudo yum install -y nginx

Nginx将完成安装在你的CentOS 7 服务器中。

2.2.3. Nginx启动

nginx -c nginx.conf

启动后就可以访问 域名或者本机IP 如果出现下图,说明启动成功。

2.2.4. Nginx 停止

//查询出nginx的pid
ps -ef|grep nginx
//通过kill 命令杀死 nginx
kill pid
注意图中nginx的 pid 为 10497

2.2.5. Nginx配置信息

网站文件存放默认目录

/usr/share/nginx/html

网站默认站点配置

/etc/nginx/conf.d/default.conf

自定义Nginx站点配置文件存放目录

/etc/nginx/conf.d/

Nginx全局配置

/etc/nginx/nginx.conf

2.2 docker 安装 Nginx

2.2.1下载镜像,

docker pull nginx:1.9

2.2.2 启动容器,

docker run -d -p 8080:80 nginx:1.9

把容器内的nginx的80端口,映射到当前服务器的8080端口,假设当前服务器的ip是192.168.0.100,浏览器输入http://192.168.0.100:8080/,就可以看到nginx已启动,


三、Nginx 使用

关于静态资源服务器的使用这里就不做说明了。

3.1 反向代理

小例子:实现访问本机 ip 然后代理 我的博地址 ,也就是在浏览器输入本机地址,然后跳转到我的博客。

3.1.1 本地安装nginx

如果是本地安装的nginx 的话需要修改 /etc/nginx/conf.d/default.conf 配置文件

注释原有的 location 然后替换为新的location

//注释原有的
# location / {
# root /usr/share/nginx/html;
# index index.html index.htm;
# } //新添加的
location / {
proxy_pass http://blog.csdn.net/u012373815?viewmode=list;
}

然后重启nginx ,访问本机ip 就会代理到“http://blog.csdn.net/u012373815?viewmode=list“ 我的博客地址。

3.1.2 Docker 安装

如果是docker 安装的话,需要本地随意目录下新建default.conf 文件,内容如下:

server {
listen 80;
server_name localhost; #charset koi8-r;
#access_log /var/log/nginx/log/host.access.log main; location / {
proxy_pass http://blog.csdn.net/u012373815?viewmode=list;
} error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}

然后重新启动容器,将default.conf 文件映射到docker容器内。 
启动命令如下:

docker run -p 8080:80 --name myNginx -v /本地路径/default.conf:/etc/nginx/conf.d/default.conf -d nginx:1.9

容器启动后 ,访问本机ip 就会代理到“http://blog.csdn.net/u012373815?viewmode=list“ 我的博客地址。

3.2 负载均衡

上面的配置只实现了反向代理没有实现传说中的负载均衡。所有的请求就都被反向代理到 我的博客地址去了。这样我们反向代理的功能是实现了,可是就能代理到一台服务器上哪有什么负载均衡呀?这就要用到 nginx 的 upstream 模块了。

upstream backend {
ip_hash;
server backend1.example.com;
server backend2.example.com;
server backend3.example.com;
server backend4.example.com;
}
location / {
proxy_pass http://backend;
}

我们在 upstream 中指定了一组机器,并将这个组命名为 backend,这样在 proxypass 中只要将请求转移到 backend 这个 upstream 中我们就实现了在四台机器的反向代理加负载均衡。其中的 iphash指明了我们均衡的方式是按照用户的 ip 地址进行分配。 
要让配置生效,我们不必重启 nginx 只需要 reload 配置即可。

负载均衡配置示例

假设这样一个应用场景:将应用部署在 192.168.1.11:80、192.168.1.12:80、192.168.1.13:80 三台 linux 环境的服务器上。网站域名叫 www.helloworld.com,公网 IP 为 192.168.1.11。在公网 IP 所在的服务器上部署 nginx,对所有请求做负载均衡处理。

nginx.conf 配置如下:

http {
#设定mime类型,类型由mime.type文件定义
include /etc/nginx/mime.types;
default_type application/octet-stream;
#设定日志格式
access_log /var/log/nginx/access.log; #设定负载均衡的服务器列表
upstream load_balance_server {
#weigth参数表示权值,权值越高被分配到的几率越大
server 192.168.1.11:80 weight=5;
server 192.168.1.12:80 weight=1;
server 192.168.1.13:80 weight=6;
} #HTTP服务器
server {
#侦听80端口
listen 80; #定义使用www.xx.com访问
server_name www.helloworld.com; #对所有请求进行负载均衡请求
location / {
root /root; #定义服务器的默认网站根目录位置
index index.html index.htm; #定义首页索引文件的名称
proxy_pass http://load_balance_server ;#请求转向load_balance_server 定义的服务器列表 #以下是一些反向代理的配置(可选择性配置)
#proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
#后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
proxy_set_header X-Forwarded-For $remote_addr;
proxy_connect_timeout 90; #nginx跟后端服务器连接超时时间(代理连接超时)
proxy_send_timeout 90; #后端服务器数据回传时间(代理发送超时)
proxy_read_timeout 90; #连接成功后,后端服务器响应时间(代理接收超时)
proxy_buffer_size 4k; #设置代理服务器(nginx)保存用户头信息的缓冲区大小
proxy_buffers 4 32k; #proxy_buffers缓冲区,网页平均在32k以下的话,这样设置
proxy_busy_buffers_size 64k; #高负荷下缓冲大小(proxy_buffers*2)
proxy_temp_file_write_size 64k; #设定缓存文件夹大小,大于这个值,将从upstream服务器传 client_max_body_size 10m; #允许客户端请求的最大单文件字节数
client_body_buffer_size 128k; #缓冲区代理缓冲用户端请求的最大字节数
}
}
}

四、nginx配置location总结及rewrite规则写法

4.1 正则

  • . : 匹配除换行符以外的任意字符
  • ? : 重复0次或1次
  • + : 重复1次或更多次
  • * : 重复0次或更多次
  • \d :匹配数字
  • ^ : 匹配字符串的开始
  • $ : 匹配字符串的介绍
  • {n} : 重复n次
  • {n,} : 重复n次或更多次
  • [c] : 匹配单个字符c
  • [a-z] : 匹配a-z小写字母的任意一个

    ~ 区分大小写匹配

    ~* 不区分大小写匹配

    !~和!~*分别为区分大小写不匹配及不区分大小写不匹配

    ^ 以什么开头的匹配

    $ 以什么结尾的匹配

  • 小括号()之间匹配的内容,可以在后面通过$1来引用,$2表示的是前面第二个()里的内容。正则里面容易让人困惑的是\转义特殊字符。

4.2 常用变量

  • $args : #这个变量等于请求行中的参数,同$query_string
  • $content_length : 请求头中的Content-length字段。
  • $content_type : 请求头中的Content-Type字段。
  • $document_root : 当前请求在root指令中指定的值。
  • $host : 请求主机头字段,否则为服务器名称。
  • $http_user_agent : 客户端agent信息
  • $http_cookie : 客户端cookie信息
  • $limit_rate : 这个变量可以限制连接速率。
  • $request_method : 客户端请求的动作,通常为GET或POST。
  • $remote_addr : 客户端的IP地址。
  • $remote_port : 客户端的端口。
  • $remote_user : 已经经过Auth Basic Module验证的用户名。
  • $request_filename : 当前请求的文件路径,由root或alias指令与URI请求生成。
  • $scheme : HTTP方法(如http,https)。
  • $server_protocol : 请求使用的协议,通常是HTTP/1.0或HTTP/1.1。
  • $server_addr : 服务器地址,在完成一次系统调用后可以确定这个值。
  • $server_name : 服务器名称。
  • $server_port : 请求到达服务器的端口号。
  • $request_uri : 包含请求参数的原始URI,不包含主机名,如:”/foo/bar.php?arg=baz”。
  • $uri : 不带请求参数的当前URI,$uri不包含主机名,如”/foo/bar.html”。
  • $document_uri : 与$uri相同。

4.3 flag标志位

  • last : 相当于Apache的[L]标记,表示完成rewrite
  • break : 停止执行当前虚拟主机的后续rewrite指令集
  • redirect : 返回302临时重定向,地址栏会显示跳转后的地址
  • permanent : 返回301永久重定向,地址栏会显示跳转后的地址
#路径重写配置Demo
location /demo/test/ {
#以/demo/test路径开始
#原始路径: http://127.0.0.1:8080/demo/test/1.html 重写后:http://127.0.0.1:8888/demo/test2/1.html
rewrite ^/demo/test/(.*)$ http://127.0.0.1:8888/demo/test2/$1 break; #以html文件结尾
#原始路径: http://127.0.0.1:8080/demo/test/1.html 重写后:http://127.0.0.1:8888/test/demo/test/1.html
# 此种方式配置会改变浏览器地址,引发跨域请求的问题
#rewrite ^/(.*\.html)$ http://127.0.0.1:8888/test/$1 break; # 此种方式,结合proxy_pass 重写后则不会改变浏览器地址,不存在跨域问题
#rewrite ^/(.*\.html)$ /test/$1 break;
#proxy_pass http://127.0.0.1:8888;
}

参考资料: 
http://blog.csdn.net/u012486840/article/details/52610320 
http://www.jb51.net/article/61137.htm

http://seanlook.com/2015/05/17/nginx-location-rewrite/

作者:双斜杠少年 来源:CSDN 原文:https://blog.csdn.net/u012373815/article/details/54911332

Nginx 的三大功能的更多相关文章

  1. cat主要有三大功能

    cat主要有三大功能:1.一次显示整个文件.$ cat filename2.从键盘创建一个文件.$ cat > filename     只能创建新文件,不能编辑已有文件.3.将几个文件合并为一 ...

  2. Nginx 状态信息功能配置

    Nginx 状态信息功能介绍 Nginx 有一个 ngx_http_stub_status_module 模块,主要功能是记录 Nginx 的基本访问状态信息,让使用者了解 Nginx 的工作状态 要 ...

  3. window的三大功能,行内样式获取的讲解 getcomputerStyle

    window的三大功能: js引擎 dom渲染 获取行内中css的属性: chrome和Firefox加上 ie9+(所谓的高级浏览器)用的方法: window.getComeputerStyle(d ...

  4. Nginx启动SSL功能

    Nginx启动SSL功能,并进行功能优化,你看这个就足够了 一:开始Nginx的SSL模块 1.1 Nginx如果未开启SSL模块,配置Https时提示错误 nginx: [emerg] the &q ...

  5. 启动Nginx目录浏览功能及 让用户通过用户名密码认证访问web站点

    一.启动Nginx目录浏览功能  [root@abcdocker extra]# cat w.conf server { listen 80; server_name IP地址; location / ...

  6. Hue的三大特点、三大功能和架构

    不多说,直接上干货! Hue 是 Cloudera 的大数据 Web 工具 官方访问网站 : http://gethue.com/ GitHub : https://github.com/cloude ...

  7. Nginx代理缓存功能

    Nginx代理缓存功能      Nginx缓存主要是用于减轻后端服务器的负载,提高网站并发量,提升用户体验度. 注意:Nginx反向代理的缓存功能是由ngx_http_proxy_module提供, ...

  8. Nginx 反向代理功能-动静分离

    Nginx 反向代理功能-动静分离 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.

  9. Nginx 反向代理功能-实现Nginx tcp负载均衡

    Nginx 反向代理功能-实现Nginx tcp负载均衡 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.

随机推荐

  1. [Spring cloud 一步步实现广告系统] 21. 系统错误汇总

    广告系统学习过程中问题答疑 博客园 Eureka集群启动报错 Answer 因为Eureka在集群启动过程中,会连接集群中其他的机器进行数据同步,在这个过程中,如果别的服务还没有启动完成,就会出现Co ...

  2. 敏捷之旅--携程Scrum Master 新官上任三把火?

      随着敏捷在国内的推行,越来越多的公司和组织开始使用敏捷领导团队. 敏捷团队如雨后春笋之势涌现. 敏捷教练的团队也越来越壮大.   原先只需要一个敏捷教练就能搞定,但是随着团队越来越多,我们难免会将 ...

  3. C#中appium自动化执行移动命令mobile:shell用法

    官网:https://appium.readthedocs.io/en/latest/en/commands/mobile-command/#android 1.执行ADB shell命令(需要设置服 ...

  4. MUI-页面传参数

    点击第一个页面的标签,跳转到第二个页面,把第一个页面的值也传往目标页面 现在提供两种实现方式 注意:需要在手机运行才可以,用电脑浏览器可能不支持. 第一种方式  页面已创建,通过自定义事件传值 fir ...

  5. ASP.NET Core 2.2 : 二十六. 应用JWT进行用户认证

    本文将通过实际的例子来演示如何在ASP.NET Core中应用JWT进行用户认证以及Token的刷新方案(ASP.NET Core 系列目录) 一.什么是JWT? JWT(json web token ...

  6. Java描述表达式求值的两种解法:双栈结构和二叉树

    Java描述表达式求值的两种解法:双栈结构和二叉树 原题大意:表达式求值 求一个非负整数四则混合运算且含嵌套括号表达式的值.如: # 输入: 1+2*(6/2)-4 # 输出: 3.0 数据保证: 保 ...

  7. 百度地图api之----根据用户ip定位城市

    LocalCity 这个类是利用用户IP地址去百度数据库里查询得到IP所在的城市,用法如下: var objCity = new BMap.LocalCity(); objCity.get(funct ...

  8. egret之红包满屏随意飘动

    在做这个需求之前,我们假设屏幕上同时飘动的红包数最大为10 ) { let redBag = GameUtil.createBitmapByName("Red_bag_png"); ...

  9. Fiddle用于移动端抓包

    一.什么情况下可以用到 1.调查参考其他移动端网站的抓包,他们传输方式.如微信上京东的智能机器人的包.移动端的请求接口格式.如何实现的效果等. 2.调试本地移动端页面的测试页面效果是否有问题.如:页面 ...

  10. 华为手机,删除安装包apk

    1.下载“文件管理”,完成安装后,打开文件管理. 2.找到安装包,单击. 3.长按想要删除的apk文件,页面上会出现垃圾箱的图标,点击垃圾箱即可完成删除.