Nginx使用

Nginx学习总结
1.Nginx基本介绍
1.1 Nginxg工作原理
有一个主进程和几个工作进程,主进程的主要功能是读取和解析配置文件,以及维护工作进程,工作进程进行实际的请求处理,Nginx采用事件驱动模型和系统依赖进程,工作进程的数量可以在配置文件中配置,或者自动调整为计算机CPU的核心数。
nginx的启动的停止:
$ nginx -s signal
signals:
(1) stop 快速停止nginx
(2) quit 缓慢停止nginx(会等工作进程处理完当前请求后再关闭nginx)
(3) reload 重新加载配置文件
(4) reopen 重新打开日志文件
执行这些命令的用户应该和启动nginx的用户相同
注意:配置文件的修改会在重新加载配置文件或nginx重启后才会生效


当nginx的主进程接收到重新加载配置文件的信号时,nginx就会检查新的配置文件的语法有效性,然后尝试使用新的配置文件,如果成功,nginx的主进程就会启动新的工作进程,给旧的工作进程发送信号使其停止。否则nginx就会回滚配置文件的改变,并且继续使用旧的配置文件。工作进程接收到关闭的信号后,就不再接受新的链接,把当前的请求处理完后,旧的工作进程就会退出。
$ kill -s QUIT masterprocessid   效果和 nginx -s quit 相同
$ ps -ax | grep nginx 查看nginx的所有进程


1.2 nginx配置文件的结构 
nginx由模块构成,这些模块被配置文件中的directives控制,directives分为简单的directives和块级directives,一个简单的directives由一个名字和参数(中间用空格分隔),末尾的英文分号组成;如 server_name http://www.example.com; 一个块级directives和简单的directives有同样的结构,不过以被{}包围的其他的指令结尾。如果一个块级directives内部含有其他的directives,则被称为context
配置文件中的directives,如果不在任何context中,就被看作是在main context中,
# 开头的一行代表时注释


1.3 静态内容服务 
web服务器的一个重要任务就是提供静态资源服务,如网页,图片,js脚步,CSS样式文件等。比如静态html文件放在/data/www下,图片文件放在/data/images下,则要在server块中定义两个location。通常情况下,配置文件中会包含几个server配置块,根据监听端口和server_names区分,当nginx决定哪个server处理请求后,就会选择匹配的server中匹配的location, 例如匹配了下面这个locaton,"/"就会添加到root指定的目录后,组成访问本地文件的请求路径。
location / {
root /data/www;
}
如下一个server中的location配置:
server {
location / {
root /data/www;
}


location /images/ {
root /data;
}
}
处理以/images/开头的请求,服务器会从/data/images下发送文件到客户端,例如访问http://localhost/images/simple.png,服务器就会返回/data/images/simple.png,如果这个文件不存在就会返回404错误,响应不是以/images/开头的请求,服务器就会从/data/www下返回数据,例如http://localhost/www/simple.html,服务器会返回/data/www/simple.html。
如果一切没有按照期待的工作,可以查看access.log 或 error.log分析原因。


1.4 作为代理服务器使用
nginx经常会作为代理服务器使用,即获得请求,把它们传到被代理的服务器,从被代理的服务器获得响应,然后发送到客户端。
配置一个server块:
  server {
  listen 8080;
  root /data/up1;


  location / {  
  }
  }
这是一个监听8080端口的简单服务器配置,映射所有的请求到本地/data/up1目录,这个root是在server context中,这个root directives会作用于没有自己的root directives的location块。
  server {
     location / {
      proxy_pass http://localhost:8080;
     }


     #location /images/ {
     # root /data;
     #}


     location ~\.(gif|jpg|png)$ {
      root /data/images;
     }
  }
这个配置会把所有以.gif, .jpg, .png结尾的请求映射到本地/data/images目录,其他的请求都会发到被代理的服务器。


1.5 配置FastCGI代理
nginx可以路由请求到FastCGI Server,FastCGI Server上运行如PHP开发的cgi程序。
server {
   location / {
       fastcgi_pass  localhost:9000;
       fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
       fastcgi_param QUERY_STRING    $query_string;
   }


   location ~ \.(gif|jpg|png)$ {
       root /data/images;
   }
}
fastcgi_pass 配置FastCGI Server监听地址和端口,在本地服务器操作通过FastCGI协议。fastcgi_param设置传递给FastCGI Server的参数,SCRIPT_FILENAME用于确定脚本文件名字,QUERY_STRING用于传递请求参数。
  




2.Nginx处理请求流程
有域名的虚拟服务器 nginx首先要确定由哪一个服务器处理用户请求
例子:
server {
listen 80;
server_name example.org www.example.org;
......
}


server {
listen   80;
server_name example.com www.example.com;
......
}


server {
listen 80;
server_name example.net www.example.net;
}
在这个示例配置中,nginx测试请求头中的field "Host",决定请求应该路由到哪个服务器,如果配置的服务器没有一个匹配,或者请求头中没有这个域,nginx会把这个请求路由到默认的服务器,在这个配置中就是第一个server。


3.服务器名
server names使用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$;
}
查找通过配置的服务器名 如果不止一个匹配项 第一个匹配的项将会被选择使用 查找匹配项的顺序
1)确定的名字
2)以*开头的最长的通配符名
3)以*结尾的最长通配符名
4)第一个匹配的正则表达式名(按照在配置文件中的出现顺序)


通配符名:以*号开头或结尾的,如:www.*.example.com,不是通配符名, 一个*可以匹配几部分, *.example.org 即匹配www.example.org 也匹配www.new.example.org,注意还有一个特殊的通配符名:".example.org",同时匹配确定的名example.org又匹配通配符名*.example.org


4.使用Nginx实现负载均衡
nginx支持的负载均衡机制
. 到应用服务器的请求以round-robin的方式分配到各个服务器
. 下一个请求分配到活跃的链接数量最小的服务器
. 根据一个hash函数的计算结果决定选择哪一个服务器处理下一个请求


一个负载均衡的配置例子:
http {
upstream myapp1 {
server srv1.example.com;
server srv2.example.com;
server srv3.example.com;
}


server {
listen  80;
location / {
proxy_pass http://myapp1;
}
}
}
在这个例子中,由于负载均衡的方法没有制定,就会使用默认的round-robin机制。
nginx中的反向代理的实现,包括提供负载均衡为HTTP , HTTPS, FastCGI, uwsgi, SCGI, and memcached
为HTTPS提供负载均衡只需要把http://myapp1 改为 https://myapp1  就是实用https协议
当为FastCGI, uwsgi, SCGI, and memcached提供负载均衡,则需分别使用fastcgi_pass, uwsgi_pass, scgi_pass, and memcached_pass directive


启用least-connected策略 配置如下:
upstream myapp1 {
least_conn;
server srv1.example.com;
...
}


如果一个特定的客户端的请求总是连接到一个特定的服务器,则需使用ip-hash,配置如下:
upstream myapp1 {
ip_hash;
server srv1.example.com;
...
}


5.配置HTTPS服务器
配置HTTPS服务器,在监听套接字中,ssl参数必须启用,还要配置服务器证书和私钥的存在位置
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;
...
}
服务器证书是一个公共实体,会被发送到链接到服务器的每一个客户端,私钥是一个安全实体,应该要保障安全性,私钥和证书可能会被保存在同一个文件中
ssl_certificate www.example.com.crt;
ssl_certificate www.example.com.crt;
注意:即使证书和密钥保存在同一个文件中,但只有证书会被发送到客户端


配置一个同时处理HTTP和HTTPS请求的服务器:
server {
listen  80;
listen  443 ssl;
server_name www.example.com;
ssl_certificate www.example.com.crt;
ssl_certificate www.example.com.key;
...
}






 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值