Nginx使用

xiaoxiao2021-02-28  111

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; ... }
转载请注明原文地址: https://www.6miu.com/read-62898.html

最新回复(0)