博客
关于我
nginx配置文件nginx.conf详细讲解(4)--终结篇
阅读量:332 次
发布时间:2019-03-04

本文共 6268 字,大约阅读时间需要 20 分钟。

上一节我们介绍了nginx.conf的配置文件的http模块内容,由于内容较多,为了达到短小精悍的宗旨我们单独分了一章来讲解,本节我们进行最后最后剩余模块的详细讲解。。那在讲解之前我们在来回顾下那张美图。

在这里插入图片描述
代码段粘贴过来(由于前面整体的配置文件中么有upstream的配置内容,我重新复制了一个过来)。

   upstream  app {                   ip_hash;                server 192.168.1.1:8080;                server 192.168.1.2:8080;                server 192.168.1.3:8080;                server 192.168.1.4:8080;        }        server {                   listen       81;                server_name  skyfans.app.com;                charset utf-8;                location / {                           proxy_pass http://app;                        proxy_set_header Host $host:$server_port;                        proxy_set_header X-Real-IP $remote_addr;                        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;                }                error_page   500 502 503 504  /50x.html;                location = /50x.html {                           root   html;                }        }include ./conf.d/*.conf;    # another virtual host using mix of IP-, name-, and port-based configuration    #    #server {       #    listen       8000;    #    listen       somename:8080;    #    server_name  somename  alias  another.alias;    #    location / {       #        root   html;    #        index  index.html index.htm;    #    }    #}    # HTTPS server    #    #server {       #    listen       443 ssl;    #    server_name  localhost;    #    ssl_certificate      cert.pem;    #    ssl_certificate_key  cert.key;    #    ssl_session_cache    shared:SSL:1m;    #    ssl_session_timeout  5m;    #    ssl_ciphers  HIGH:!aNULL:!MD5;    #    ssl_prefer_server_ciphers  on;    #    location / {       #        root   html;    #        index  index.html index.htm;    #    }    #}

1.upstream

定义上游服务器集群,在反向代理中proxy_pass使用,用于负载均衡的配置。

upstream  app {                   ip_hash;                server 192.168.1.1:8080;                server 192.168.1.2:8080;                server 192.168.1.3:8080;                server 192.168.1.4:8080;        include ./conf.d/*.conf;        }

1.1 upstream app

app为用户自定义的名称(定义的内容建议和应用对应,方便区分),注意记录定义的名字,因为在后面的server中需要配合调用。

1.2 ip_hash;

负载均衡配置算法,主要算法包括轮训、ip_hash、weight、第三方。这里不做详细介绍,想详细了解可飞机去:

1.3 server 192.168.1.1:8080;server 192.168.1.2:8080;

所代理的IP地址及端口内容。

1.4 include ./conf.d/*.conf;

引入加载./conf.d/下的所有conf结尾的配置文件。

2.server

server {                   listen       81;                server_name  skyfans.app.com;                charset utf-8;          location  /{              ……      }                 error_page   500 502 503 504  /50x.html;                location = /50x.html {                           root   html;}

2.1 listen 81;

代理后监听的端口。按如上配置举例说明,原存放服务的内容监听端口为8080,通过server块配置后,端口被代理为了81,我们在访问服务的时候,端口输入81即可成功访问到应用。

2.2 server_name skyfans.app.com;

server_name用于与在浏览器或程序方式时,进行http请求header头部的Host匹配,如果配置为指定的URL,则访问时完全配置UR内容。
在这里插入图片描述
注意:server_name后面可跟多个主机名,也可使用通匹符配置,如*.app.com。

2.3 charset utf-8;

字符集配置。

2.4 error_page 500 502 503 504 /50x.html;

location = /50x.html {

root html;

}

location匹配模块内容,若果上面的location匹配不到对应的地址或获取的状态码为500 502 503 504时,则反回ningx默认设置的50x.html

3.location

 location / {                           proxy_pass http://app;                        proxy_set_header Host $host:$server_port;                        proxy_set_header X-Real-IP $remote_addr;                        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;                }

3.1 location /

location作用:基于一个指令设置URI。location是根据Uri来进行不同的定位,location可以把平台的不同部分,定位到不同的URL上。一般在配置时,不同的模块会分多个location进行配置,方便区分及修改配置。

3.1.1 location [ = | ~ | ~* | ^~ ] uri { … }

 = 精确匹配,如果找到匹配=号的内容,立即停止搜索,并立即处理请求(优先级最高)
 ~ 区分大小写
 ~* 不区分大小写
 ^~ 只匹配字符串,不匹配正则表达式
 @ 指定一个命名的location,一般用于内部重定义请求,location @name {…}
当路径为/时,通常会返回首页,也就是location中配置的URL地址页。

3.1.2 举个官网的例子:

location = / {       [ configuration A ]}location / {       [ configuration B ]}location /documents/ {       [ configuration C ]}location ^~ /images/ {       [ configuration D ]}location ~* \.(gif|jpg|jpeg)$ {       [ configuration E ]}

3.1.3 最终访问测试的结果如下:

 / 匹配A(完全匹配)。
 /index.html 匹配B(配置的URL地址)
 /documents/document.html 匹配C(匹配documents下的内容)
 /images/1.gif 匹配D
 /documents/1.jpg 匹配的是E。

总结,在实际配置中,请根据你需要使用的类型进行设置匹配内容!!

3.2. proxy_pass http://app;

proxy_pass 指令属于ngx_http_proxy_module 模块,此模块可以将请求转发到另一台服务器。上面说过,我们在配置upstream模块时,定义了一个app的负载均衡的内容,在如上定义的内容,我们需要在location模块中调用,实现求情转发的工作。

3.3 真实地址获取段

proxy_set_header Host h o s t : host: host:server_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

nginx将记录用户真实的ip地址转发给后端服务器配置。
这里的 h o s t 和 host和 hostremote_addr都是nginx的导出变量,可以再配置文件中直接使用。这里使用用 h o s t 代 替 host代替 hosthttp_host变量,从而避免http请求中丢失Host头部的情况下Host不被重写的失误。
在这里插入图片描述
注意:这段配置内容也可以有效的防止伪Ip攻击,通过如上配置,可以记录真实的访问IP地址。

4.https协议代理配置内容

依赖模块:http_ssl_module。默认安装nginx不会自带,编译的时候需要加上with -http_ssl_module内容。

  #HTTPS server    #    server {           listen       443 ssl;        server_name  localhost;        ssl_certificate      cert.pem;        ssl_certificate_key  cert.key;       ssl_session_cache    shared:SSL:1m;       ssl_session_timeout  5m;      server_tokens off;        ssl_ciphers  HIGH:!aNULL:!MD5;       ssl_prefer_server_ciphers  on;        location / {              root   html;           index  index.html index.htm;       }

默认在nginx安装完毕后,配置文件中是存在https协议配置的内,只不过在不使用的时候,直接是被注释掉的内容。这里我们简单的针对于内容进行讲解。配置https内容时,需要用到第三方可信任的 SSL 证书,需要提前进行准备。

4.1 关于 SSL 证书

SSL 证书主要有两个功能:加密和身份证明,通常需要购买,也有免费的,通过第三方 SSL 证书机构颁发。详情了解请自行百度。

4.2 listen 443 ssl;

ssl配置的端口,默认443,不建议修改。

4.3 ssl_certificate cert.pem; ssl_certificate_key cert.key;

证书文件(pem)和私钥文件(key),注意不同的机构颁发的文件可能不同,证书文件还有.crt结尾的。要注意,这里是ssl key文件存放的相对路径,也可以配置为绝对路径,根据自己的文件名称和路径修改即可。

4.4 ssl_session_cache shared:SSL:1m; ssl_session_timeout 5m;

缓存时间和超时时间。配置用于SSL会话的缓存时间为1分钟。开启SSL会话功能后,该指令定义使用会话的期限。

4.5 server_tokens off;

禁止在header中出现服务器版本,防止黑客利用版本漏洞攻击。强烈建议配置此项!!!

4.6 ssl_ciphers HIGH:!aNULL:!MD5;

openssl支持的加密套件,这里采用算法套件MD5算法。

4.7 ssl_prefer_server_ciphers on;

指定是否服务器密码优先于客户端密码。

这里https配置内容我们简单讲解下,后续有时间进行一章单独的详细讲解。
在这里插入图片描述
花了4章的时间,磨磨唧唧的终于讲完了。详细的内容就详细看每个章节的内容吧,要是想直接用大脑记录nginx.conf的配置模块,我觉得直接看图即可了。这图,多美,这图,多帅,这图,一下省略1W字赞美咱的图。
在这里插入图片描述
写在最后,文章中相当于介绍了所有的模块内容,在实际工作配置中,不建议所有的内容全部都配置在nginx.conf文件中,因为实际项目上,内容多,模块多,若都配置在一个文件中,找不好找,改不还改,所以,给予建议应优先采用引入配置文件的方式,也就是类似于1.4中的内容。一个大的模块进行创建一个文件夹,进行存放不同的配置文件,这样方便我们后期的运维。好,nignx.conf的讲解内容就到这!!!!!
在这里插入图片描述

转载地址:http://wbie.baihongyu.com/

你可能感兴趣的文章
窄带随机过程的产生
查看>>
随机四则运算
查看>>
Maven
查看>>
zookeeper使用
查看>>
Java入门常见错误总结
查看>>
Java重载overload
查看>>
Java面向对象
查看>>
JAVA带标签的break和continue
查看>>
Java_File类的基本用法
查看>>
Java获取线程基本信息的方法
查看>>
JavaWeb用户信息管理系统-创建登录业的务持久层
查看>>
SpringIoC和DI注解开发
查看>>
Mybatis快速入门
查看>>
Java类和对象
查看>>
Java集合Collection
查看>>
Java基础知识日积月累(Tip of the Day08)
查看>>
SpringMVC入门-概述和基本配置
查看>>
SpringBoot快速入门
查看>>
医疗管理系统-手机快速登录和SpringSecurity权限控制
查看>>
SpringCloud微服务简介
查看>>