nginx的常用配置

目前主流的web服务5大神器 Nginx、Apache、Tomcat、Jetty、iis

今天讲一下nginx的常规操作,剩下几个后续再讲。

一、负载均衡(正反代理)

有nginx的服务架构,通常nginx放在最外层接受入口流量,既我们说的正向代理。

nginx一般代理的都是 静态资源、tomcat、apache、jetty、iis等,当然 这个顺序不是绝对的,这里面有些组件功能也比较强,也能承担nginx的部分工作。

1、正向代理

当你访问 www.baidu.com   时,其实是要请求到baidu服务器的www资源,好比你知道一个人电话号码,打这个号码就可以找到号码持有者一样,这就是一个正向过程。

通常我们的正向代理配置是这样的:

server
{
    listen       80;
    server_name  你的dns或者ip(www.badiu.com 或 公网ip);

    location / {
        proxy_pass http://localhost:8080/;
        add_header Access-Control-Allow-Origin *;
        add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Accept-Encoding '';
        proxy_cache_valid any 1m;
        client_max_body_size    100m;
        client_body_buffer_size 128k;
    }
    error_page   500 502 503 504  /50x.html;
}

访问 server_name的地址时会经过dns解析到服务器  nginx监听80端口请求获得请求信息,进行location声明资源处理,正向代理完成。 这里有很多方式可以配置,比如 请求的路径过滤,跨域(带请求头、cookie转发等等)可以自行去查阅nginx文档

正向代理完成后,如果出现多个服务都是需要被这个请求代理的就很尴尬了,而且只配置一个服务,当这个localhost:8080服务挂了之后,这个请求就会变成502,于是需要有反向代理来完善

2、反向代理

#======java服务代理
upstream java {
    server localhost:8890;
    server localhost:8990;
}
server
{
    listen       80;
    server_name  你的dns或者ip(www.badiu.com 或 公网ip);

    location / {
        proxy_pass http://java/;
        add_header Access-Control-Allow-Origin *;
        add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Accept-Encoding '';
        proxy_cache_valid any 1m;
        client_max_body_size    100m;
        client_body_buffer_size 128k;
    }
    error_page   500 502 503 504  /50x.html;
}

 

总共有2处不同,第一处在原来的配置上修改了localtion 中的 proxy_pass参数;第二处增加了代理服务器声明

upstream 中有几个需要注意的地方:

1、upstream 后面跟着的名称要和localtion 中的 proxy_pass 对应。

2、每个 server 可以增加负载策略,常用的有权重分配和轮询,有很多扩展,可以自行查阅nginx文档。

3、每个server 后面的ip地址 可以是域名,可以是ip ,但是免费版的nginx不支持动态dns。如何理解动态的dns,比如 www.test.com ip解析为 123.123.123.123 当 www.test.com的a记录指向变成了其他ip了之后 nginx不会更新这个ip,而是在启动的时候会进行一次解析然后自身存储起来。商业版的有很多强大的功能,也包括动态dns解析的能力。要解决免费版nginx的动态dns问题有2个方案:a:选择时段手动重启nginx  b:写一个脚本去轮询这个动态dns,发现指向ip变更后自动重启nginx

二、代理静态资源

server
    {
        listen       80;
        server_name  你的dns或者ip(www.badiu.com 或 公网ip);

        location /images {
            root /data;
            autoindex on;
        }
        error_page   500 502 503 504  /50x.html;
    }

假设在系统盘/data下有一个文件 test.jpg

当你请求 http://${server_name}/images/test.jpg 时 会直接把这个test.jpg给你展现到当前页面,当然也可以下载它

三、https  ssl证书

server
{
    listen       443;
    server_name  你的dns或者ip(www.badiu.com 或 公网ip);
    ssl on;
    ssl_certificate   cert.pem;
    ssl_certificate_key  cert.key;
    ssl_session_timeout 5m;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;

    location / {
        proxy_pass http://disk/;
        add_header Access-Control-Allow-Origin *;
        add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';
        add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization';
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Accept-Encoding '';
        proxy_cache_valid any 1m;
        client_max_body_size    100m;
        client_body_buffer_size 128k;
    }
    error_page   500 502 503 504  /50x.html;
}

证书制作有很多方式,可以申请阿里云免费证书,可以自己制作证书。

千万要记住 nginx配置文件下  listen和server_name两个的配置不要一样

欢迎关注我的个人公众号
欢迎关注我的个人公众号
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值