• nginx配置学习总结


    1.nginx反向代理

    在讲诉具体的配置之前,先说下正向代理与反向代理的区别。

    正向代理:是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端才能使用正向代理,而且必须要进行一些特别的设置才能使用正向代理。。正向代理是一种最终用户知道并主动使用的代理方式。 

    正向代理的典型用途是为在防火墙内的局域网客户端提供访问Internet的途径。正向代理还可以使用缓冲特性减少网络使用率。正向代理允许客户端通过它访问任意网站并且隐藏客户端自身,因此你必须采取安全措施以确保仅为经过授权的客户端提供服务。 

    反向代理:是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。反向代理对用户来说是透明的,用户是感知不到的。 

    反向代理的典型用途是将防火墙后面的服务器提供给Internet用户访问。反向代理还可以为后端的多台服务器提供负载平衡,或为后端较慢的服务器提供缓冲服务。

    修改配置文件

    /usr/local/nginx/conf/nginx.conf

    user www www;
    worker_processes 1;
    error_log logs/error.log;
    pid logs/nginx.pid;
    worker_rlimit_nofile 65535;
    events {
        use epoll;
        worker_connections 65535;
    }
    http {
        include mime.types;
        default_type application/octet-stream;
        include /usr/local/nginx/conf/vhosts/proxy.conf;
        sendfile on;
        keepalive_timeout 65;
        gzip on;
        client_max_body_size 50m; #缓冲区代理缓冲用户端请求的最大字节数,可以理解为保存到本地再传给用户
        client_body_buffer_size 256k;
        client_header_timeout 3m;
        client_body_timeout 3m;
        send_timeout 3m;
        proxy_connect_timeout 300s; #nginx跟后端服务器连接超时时间(代理连接超时)
        proxy_read_timeout 300s; #连接成功后,后端服务器响应时间(代理接收超时)
        proxy_send_timeout 300s;
        proxy_buffer_size 64k; #设置代理服务器(nginx)保存用户头信息的缓冲区大小
        proxy_buffers 4 32k; #proxy_buffers缓冲区,网页平均在32k以下的话,这样设置
        proxy_busy_buffers_size 64k; #高负荷下缓冲大小(proxy_buffers*2)
        proxy_temp_file_write_size 64k; #设定缓存文件夹大小,大于这个值,将从upstream服务器传递请求,而不缓冲到磁盘
        proxy_ignore_client_abort on; #不允许代理端主动关闭连接
        server {
            listen 80;
            server_name localhost;
            location / {
                root html;
                index index.html index.htm;
            }
            error_page 500 502 503 504 /50x.html;
            location = /50x.html {
                root html;
            }
        }
    }

    编辑反向代理服务器配置文件:

    /usr/local/nginx/conf/vhosts/proxy.conf

    server
    {
        listen 80;
        server_name jerishi1.com;
        location / {
            proxy_redirect off;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass http://192.168.10.38:3000;
        }
        access_log logs/jerishi1.com_access.log;
    }
    server
    {
        listen 80;
        server_name jerishi2.com;
        location / {
            proxy_redirect off;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass http://192.168.10.40:80;
        }
        access_log logs/jerishi2.com_access.log;
    }

    负载均衡设置

    upstream monitor_server {
        server 192.168.0.1:80;
        server 192.168.0.2:80;
    }
    server
    {
        listen 80;
        server_name nagios.xxx123.tk;
        location / {
            proxy_redirect off;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
            proxy_pass http://monitor_server;
        }
        access_log logs/nagios.jerishi.com_access.log;
    }

    2.ngnix重启

    检查配置

    $:/usr/local/nginx-1.5.1/sbin/nginx -t

    重启nginx

    $:/usr/local/nginx-1.5.1/sbin/nginx -s reload

    关闭nginx

    $:/usr/local/nginx-1.5.1/sbin/nginx -s stop

    3.Location处理逻辑

    location匹配命令

    • ~ #波浪线表示执行一个正则匹配,区分大小写
    • ~* #表示执行一个正则匹配,不区分大小写
    • ^~ #^~表示普通字符匹配,如果该选项匹配,只匹配该选项,不匹配别的选项,一般用来匹配目录
    • = #进行普通字符精确匹配
    • @ #”@” 定义一个命名的 location,使用在内部定向时,例如 error_page, try_files

    代码示例:

    location  = / {
      # 只匹配"/".
      [ configuration A ] 
    }
    location  / {
      # 匹配任何请求,因为所有请求都是以"/"开始
      # 但是更长字符匹配或者正则表达式匹配会优先匹配
      [ configuration B ] 
    }
    location ^~ /images/ {
      # 匹配任何以 /images/ 开始的请求,并停止匹配 其它location
      [ configuration C ] 
    }
    location ~* .(gif|jpg|jpeg)$ {
      # 匹配以 gif, jpg, or jpeg结尾的请求. 
      # 但是所有 /images/ 目录的请求将由 [Configuration C]处理.   
      [ configuration D ] 
    }

    匹配流程: 

    1. 用uri测试所有的prefix string; 
    2. Uri精确匹配到=定义的loacation,使用这个location,停止搜索; 
    3. 匹配最长prefix string,如果这个最长prefix string带有^~修饰符,使用这个location,停止搜索,否则: 
    4. 存储这个最长匹配; 
    5. 然后匹配正则表达; 
    6. 匹配到第一条正则表达式,使用这个location,停止搜索; 
    7. 没有匹配到正则表达式,使用#4步存储的prefix string的location。

    4.nginx root&alias比较

    root

    语法:root path 
    默认值:root html 
    配置段:http、server、location、if 
    root会根据完整的URI请求来映射,也就是/path/uri. 
    示例:

    location ~ ^/qcloud/ {
        root /data/release/www.qcloud.com;
        autoindex on;
        auth_basic            "Restricted";
        auth_basic_user_file  passwd/weblogs;
    }

    如果一个请求的URI是/qcloud/www.buy.qcloud.com/main.js时,web服务器将会返回/data/release/www.qcloud.com/qcloud/www.buy.qcloud.com/main.js的文件。

    alias

    语法:alias path 
    配置段:location 
    alias会把location后面配置的路径丢弃掉,把当前匹配到的目录指向到指定的目录。 
    示例:

    location ~ ^/qcloud/ {
        alias /data/release/www.qcloud.com;
        autoindex on;
        auth_basic            "Restricted";
        auth_basic_user_file  passwd/weblogs;
    }

    如果一个请求的URI是/qcloud/www.buy.qcloud.com/user.js时,web服务器将会返回/data/release/www.qcloud.com/www.buy.qcloud.com/main.js的文件。

     
  • 相关阅读:
    2955 ACM 杭电 抢银行 01背包 乘法
    杭店 ACM 1864 最大报销额 01背包
    【ACM】 1231 最大连续子序列
    如何保证消息队列的幂等性
    Kafka如何保证消息的高可用
    消息队列的优点和缺点
    架构学习和经验积累的方法
    如何撰写总体设计与详细设计文档
    如何做合格的面试官
    如何设计好的接口
  • 原文地址:https://www.cnblogs.com/syfwhu/p/5638151.html
Copyright © 2020-2023  润新知