nginx 配置文件解讀

參考連接html

在微服務的體系之下,Nginx正在被愈來愈多的項目採用做爲網關來使用,配合 Lua 作限流、熔斷等控制java

——源自 nginxnode

Lua 

腳本語言,用標準C語言編寫並以源代碼形式開放, 其設計目的是爲了嵌入應用程序中,從而爲應用程序提供靈活的擴展和定製功能。nginx

參考:連接web

nginx 和 Lua 如何作限流、熔斷控制?

參考: 連接apache

Lua 是一個腳本文件,裏面寫入限流程序便可django

熔斷是什麼?

參考:連接後端

服務熔斷:tomcat

當下遊的服務由於某種緣由忽然變得不可用響應過慢,上游服務爲了保證本身總體服務的可用性,再也不繼續調用目標服務,直接返回,快速釋放資源。若是目標服務狀況好轉則恢復調用。服務器

指軟件系統中,因爲某些緣由使得服務出現了過載現象,爲防止形成整個系統故障,從而採用的一種保護措施,因此不少地方把熔斷亦稱爲過載保護

nginx 原理

優勢1:

  • 傳統的小型網站併發量小,用戶使用的少,因此在低併發的狀況下,用戶能夠直接訪問tomcat服務器,而後tomcat服務器返回消息給用戶。固然,爲了解決併發,可使用負載均衡,也就是多增長几個tomcat服務器,當用戶訪問的時候,請求能夠提交到空閒的tomcat服務器上。
  • 可是這種狀況下可能會出現一種問題:假設把圖片上傳到了tomcat1上了,當要訪問這個圖片的時候,tomcat1正好在工做,因此訪問的請求就交給其餘的tomcat操做,而tomcat之間的數據沒有進行同步,因此就發生了咱們要請求的圖片找不到。
  •  爲了解決這種狀況,咱們專門創建一個圖片服務器,用來存儲圖片。這樣當都把圖片上傳的時候,不論是哪一個服務器接收到圖片,都把圖片上傳到圖片服務器。而圖片服務器上須要安裝一個http服務,可使用tomcat、apache、nginx。

優勢2:

  • nginx經常使用作靜態內容服務代理服務器,直面外來請求轉發給後面的應用服務(tomcat,django什麼的),tomcat更多用來作作一個應用容器,讓java web app跑在裏面的東西

優勢3:

  • nginx做反向代理:
  • 反向代理就是後端服務不直接對外暴露,請求首先發送到nginx,而後nginx將請求轉發到後端服務器,好比tomcat等.若是後端服務只有一臺服務器,nginx在這裏只有一個做用就是起到了代理後端服務接收請求的做用.稱之爲反向代理.

優勢4:

  • nginx做負載均衡:
  • 在現實的應用場景中,一臺後端服務器出現單點故障的機率很大或者單臺機器的吞吐量有限,沒法承擔過多請求.這時候就須要在nginx後端配置多臺服務器,利用nginx內置的規則講請求轉發到後端不一樣的機器上.這時候就起到了負載均衡的做用.

配置文件nginx.conf

參考:連接

版本:nginx/1.14.1

文件通常在:/etc/nginx/nginx.conf

主要分爲四個部分

  • main(全局設置),main部分設置的指令將影響其它全部部分的設置;
  • server(主機設置),server部分的指令主要用於指定虛擬主機域名、IP和端口;
  • upstream(上游服務器設置,主要爲反向代理、負載均衡相關配置),upstream的指令用於設置一系列的後端服務器,設置反向代理及後端服務器的負載均衡;
  • location(URL匹配特定位置後的設置),location部分用於匹配網頁位置(好比,根目錄「/」,「/images」,等等);

它們之間的關係

  • server繼承main,location繼承server;upstream既不會繼承指令也不會被繼承。它有本身的特殊指令,不須要在其餘地方的應用。

配置文件講解

# For more information on configuration, see:
#   * Official English Documentation: http://nginx.org/en/docs/
#   * Official Russian Documentation: http://nginx.org/ru/docs/

user nginx;
worker_processes auto;      # worker進程的數量
error_log /var/log/nginx/error.log;   #報錯日誌的位置
pid /run/nginx.pid;    

# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;   #加載 該目錄下全部.conf的文件進來
    
events {
    worker_connections 1024;   #每一個worker進程支持的最大鏈接數
}

http {
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile            on;   # 開啓高效傳輸模式
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;   #鏈接超時
    types_hash_max_size 2048;
        
    include             /etc/nginx/mime.types;  #nginx支持的媒體類型庫文件
    default_type        application/octet-stream;  #默認媒體類型

    # Load modular configuration files from the /etc/nginx/conf.d directory.
    # See http://nginx.org/en/docs/ngx_core_module.html#include
    # for more information.
    include /etc/nginx/conf.d/*.conf;
    
    # 表示一個獨立的虛擬主機站點
    server {
        listen       80 default_server;  #提供服務的端口,默認80
        listen       [::]:80 default_server;
        server_name  _;                  #提供服務的域名主機名
        root         /usr/share/nginx/html;  # 站點的根目錄

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        location / {
        }

        error_page 404 /404.html;
            location = /40x.html {
        }

        error_page 500 502 503 504 /50x.html;  #出現對應的http狀態碼時,使用50x.html迴應客戶
            location = /50x.html {             #location區塊開始,訪問50x.html
        }
    }

# Settings for a TLS enabled server.
#
#    server {
#        listen       443 ssl http2 default_server;
#        listen       [::]:443 ssl http2 default_server;
#        server_name  _;
#        root         /usr/share/nginx/html;
#
#        ssl_certificate "/etc/pki/nginx/server.crt";
#        ssl_certificate_key "/etc/pki/nginx/private/server.key";
#        ssl_session_cache shared:SSL:1m;
#        ssl_session_timeout  10m;
#        ssl_ciphers PROFILE=SYSTEM;
#        ssl_prefer_server_ciphers on;
#
#        # Load configuration files for the default server block.
#        include /etc/nginx/default.d/*.conf;
#
#        location / {
#        }
#
#        error_page 404 /404.html;
#            location = /40x.html {
#        }
#
#        error_page 500 502 503 504 /50x.html;
#            location = /50x.html {
#        }
#    }

}

官方文檔

參考連接

配置介紹:一個示例站點配置,它將除圖像和以「 / download /」開頭的請求以外的全部請求傳遞到後端

user  www www;

worker_processes  2;

pid /var/run/nginx.pid;

#                          [ debug | info | notice | warn | error | crit ]

error_log  /var/log/nginx.error_log  info;

events {
    worker_connections   2000;

    # use [ kqueue | epoll | /dev/poll | select | poll ];
    use kqueue;
}

http {

    include       conf/mime.types;
    default_type  application/octet-stream;


    log_format main      '$remote_addr - $remote_user [$time_local] '
                         '"$request" $status $bytes_sent '
                         '"$http_referer" "$http_user_agent" '
                         '"$gzip_ratio"';

    log_format download  '$remote_addr - $remote_user [$time_local] '
                         '"$request" $status $bytes_sent '
                         '"$http_referer" "$http_user_agent" '
                         '"$http_range" "$sent_http_content_range"';

    client_header_timeout  3m;
    client_body_timeout    3m;
    send_timeout           3m;

    client_header_buffer_size    1k;
    large_client_header_buffers  4 4k;

    gzip on;
    gzip_min_length  1100;
    gzip_buffers     4 8k;
    gzip_types       text/plain;

    output_buffers   1 32k;
    postpone_output  1460;

    sendfile         on;
    tcp_nopush       on;
    tcp_nodelay      on;
    send_lowat       12000;

    keepalive_timeout  75 20;

    #lingering_time     30;
    #lingering_timeout  10;
    #reset_timedout_connection  on;


    server {
        listen        one.example.com;
        server_name   one.example.com  www.one.example.com;

        access_log   /var/log/nginx.access_log  main;

        location / {
            proxy_pass         http://127.0.0.1/;
            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;

            client_max_body_size       10m;
            client_body_buffer_size    128k;

            client_body_temp_path      /var/nginx/client_body_temp;

            proxy_connect_timeout      70;
            proxy_send_timeout         90;
            proxy_read_timeout         90;
            proxy_send_lowat           12000;

            proxy_buffer_size          4k;
            proxy_buffers              4 32k;
            proxy_busy_buffers_size    64k;
            proxy_temp_file_write_size 64k;

            proxy_temp_path            /var/nginx/proxy_temp;

            charset  koi8-r;
        }

        error_page  404  /404.html;

        location = /404.html {
            root  /spool/www;
        }

        location /old_stuff/ {
            rewrite   ^/old_stuff/(.*)$  /new_stuff/$1  permanent;
        }

        location /download/ {

            valid_referers  none  blocked  server_names  *.example.com;

            if ($invalid_referer) {
                #rewrite   ^/   http://www.example.com/;
                return   403;
            }

            #rewrite_log  on;

            # rewrite /download/*/mp3/*.any_ext to /download/*/mp3/*.mp3
            rewrite ^/(download/.*)/mp3/(.*)\..*$
                    /$1/mp3/$2.mp3                   break;

            root         /spool/www;
            #autoindex    on;
            access_log   /var/log/nginx-download.access_log  download;
        }

        location ~* \.(jpg|jpeg|gif)$ {
            root         /spool/www;
            access_log   off;
            expires      30d;
        }
    }
}
相關文章
相關標籤/搜索