nginx配置文件nginx.conf详细讲解(4)--终结篇

上一节我们介绍了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、第三方。这里不做详细介绍,想详细了解可飞机去:nginx的负载均衡算法

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的讲解内容就到这!!!!!
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值