nginx.conf 基本配置模板和结构
生活随笔
收集整理的這篇文章主要介紹了
nginx.conf 基本配置模板和结构
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 配置
- nginx.conf 配置結構
- nginx.conf 基本配置模板
- 如何驗證效果
配置
nginx.conf 配置結構
... #全局塊 events { #events塊 ... }http #http塊 {... #http全局塊server #server塊{ ... #server全局塊location [PATTERN] #location塊{...}location [PATTERN] {...}}server{...}... #http全局塊 }- 1、main全局塊:配置影響nginx全局的指令。一般有運行nginx服務器的用戶組,nginx進程pid存放路徑,日志存放路徑,配置文件引入,允許生成worker process數等。
- 2、events塊:配置影響nginx服務器或與用戶的網絡連接。有每個進程的最大連接數,選取哪種事件驅動模型處理連接請求,是否允許同時接受多個網路連接,開啟多個網絡連接序列化等。
- 3、http塊:可以嵌套多個server,配置代理,緩存,日志定義等絕大多數功能和第三方模塊的配置。如文件引入,mime-type定義,日志自定義,是否使用sendfile傳輸文件,連接超時時間,單連接請求數等。
- 4、server塊:配置虛擬主機的相關參數,一個http中可以有多個server。
- 5、location塊:配置請求的路由,以及各種頁面的處理情況。
不同模塊指令關系:server繼承main;location繼承server;upstream既不會繼承指令也不會被繼承,它有自己的特殊指令,不需要在其他地方的應用
nginx.conf 基本配置模板
每個指令必須有分號結束
########### 每個指令必須有分號結束。##################配置用戶或者組,默認為nobody nobody。 #user administrator administrators; #允許生成的進程數,默認為1 #worker_processes 2; #指定nginx進程運行文件存放地址 #pid /nginx/pid/nginx.pid; #制定錯誤日志路徑,級別。這個設置可以放入全局塊,http塊,server塊,級別依次為:debug|info|notice|warn|error|crit|alert|emerg error_log log/error.log debug; #工作模式及連接數上限 events {#設置網路連接序列化,防止驚群現象發生,默認為onaccept_mutex on; #設置一個進程是否同時接受多個網絡連接,默認為offmulti_accept on; #事件驅動模型,select|poll|kqueue|epoll|resig|/dev/poll|eventport#use epoll; #單個work進程允許的最大連接數,默認為512worker_connections 1024; }#http服務器 http {#文件擴展名與文件類型映射表。設定mime類型(郵件支持類型),類型由mime.types文件定義#include /usr/local/etc/nginx/conf/mime.types;include mime.types;#默認文件類型,默認為text/plaindefault_type application/octet-stream; #取消服務訪問日志#access_log off; #自定義日志格式log_format myFormat '$remote_addr–$remote_user [$time_local] $request $status $body_bytes_sent $http_referer $http_user_agent $http_x_forwarded_for'; #設置訪問日志路徑和格式。"log/"該路徑為nginx日志的相對路徑,mac下是/usr/local/var/log/。combined為日志格式的默認值access_log log/access.log myFormat; rewrite_log on;#允許sendfile方式傳輸文件,默認為off,可以在http塊,server塊,location塊。(sendfile系統調用不需要將數據拷貝或者映射到應用程序地址空間中去)sendfile on; #每個進程每次調用傳輸數量不能大于設定的值,默認為0,即不設上限。sendfile_max_chunk 100k; #連接超時時間,默認為75s,可以在http,server,location塊。keepalive_timeout 65; #gzip壓縮開關#gzip on;tcp_nodelay on;#設定實際的服務器列表upstream mysvr1 { server 127.0.0.1:7878;server 192.168.10.121:3333 backup; #熱備(其它所有的非backup機器down或者忙的時候,請求backup機器))}upstream mysvr2 {#weigth參數表示權值,權值越高被分配到的幾率越大server 192.168.1.11:80 weight=5;server 192.168.1.12:80 weight=1;server 192.168.1.13:80 weight=6;}upstream https-svr {#每個請求按訪問ip的hash結果分配,這樣每個訪客固定訪問一個后端服務器,可以解決session的問題ip_hash;server 192.168.1.11:90;server 192.168.1.12:90;}#error_page 404 https://www.baidu.com; #錯誤頁#HTTP服務器# 靜態資源一般放在nginx所在主機server {listen 80; #監聽HTTP端口server_name 127.0.0.1; #監聽地址 keepalive_requests 120; #單連接請求上限次數set $doc_root_dir "/Users/doing/IdeaProjects/edu-front-2.0"; #設置server里全局變量#index index.html; #定義首頁索引文件的名稱location ~*^.+$ { #請求的url過濾,正則匹配,~為區分大小寫,~*為不區分大小寫。root $doc_root_dir; #靜態資源根目錄proxy_pass http://mysvr1; #請求轉向“mysvr1”定義的服務器列表#deny 127.0.0.1; #拒絕的ip#allow 172.18.5.54; #允許的ip } }#httpserver {listen 80;server_name www.helloworld.com; #監聽基于域名的虛擬主機。可有多個,可以使用正則表達式和通配符charset utf-8; #編碼格式set $static_root_dir "/Users/doing/static";location /app1 { #反向代理的路徑(和upstream綁定),location后面設置映射的路徑 proxy_pass http://zp_server1;} location /app2 { proxy_pass http://zp_server2;} location ~ ^/(images|javascript|js|css|flash|media|static)/ { #靜態文件,nginx自己處理root $static_root_dir;expires 30d; #靜態資源過時間30天}location ~ /\.ht { #禁止訪問 .htxxx 文件deny all;}location = /do_not_delete.html { #直接簡單粗暴的返回狀態碼及內容文本return 200 "hello.";}# 指定某些路徑使用https訪問(使用正則表達式匹配路徑+重寫uri路徑)location ~* /http* { #路徑匹配規則:如localhost/http、localhost/httpsss等等#rewrite只能對域名后邊的除去傳遞的參數外的字符串起作用,例如www.c.com/proxy/html/api/msg?method=1¶=2只能對/proxy/html/api/msg重寫。#rewrite 規則 定向路徑 重寫類型;#rewrite后面的參數是一個簡單的正則。$1代表正則中的第一個()。#$host是nginx內置全局變量,代表請求的主機名#重寫規則permanent表示返回301永久重定向rewrite ^/(.*)$ https://$host/$1 permanent;}#錯誤處理頁面(可選擇性配置)#error_page 404 /404.html;#error_page 500 502 503 504 /50x.html;#以下是一些反向代理的配置(可選擇性配置)#proxy_redirect off;#proxy_set_header Host $host; #proxy_set_header用于設置發送到后端服務器的request的請求頭#proxy_set_header X-Real-IP $remote_addr;#proxy_set_header X-Forwarded-For $remote_addr; #后端的Web服務器可以通過X-Forwarded-For獲取用戶真實IP#proxy_connect_timeout 90; #nginx跟后端服務器連接超時時間(代理連接超時)#proxy_send_timeout 90; #后端服務器數據回傳時間(代理發送超時)#proxy_read_timeout 90; #連接成功后,后端服務器響應時間(代理接收超時)#proxy_buffer_size 4k; #設置代理服務器(nginx)保存用戶頭信息的緩沖區大小#proxy_buffers 4 32k; #proxy_buffers緩沖區,網頁平均在32k以下的話,這樣設置#proxy_busy_buffers_size 64k; #高負荷下緩沖大小(proxy_buffers*2)#proxy_temp_file_write_size 64k; #設定緩存文件夾大小,大于這個值,將從upstream服務器傳#client_max_body_size 10m; #允許客戶端請求的最大單文件字節數#client_body_buffer_size 128k; #緩沖區代理緩沖用戶端請求的最大字節數}#https#(1)HTTPS的固定端口號是443,不同于HTTP的80端口;#(2)SSL標準需要引入安全證書,所以在 nginx.conf 中你需要指定證書和它對應的 keyserver {listen 443;server_name www.hellohttps1.com www.hellohttps2.com;set $geek_web_root "/Users/doing/IdeaProjects/backend-geek-web";ssl_certificate /usr/local/etc/nginx/ssl-key/ssl.crt; #ssl證書文件位置(常見證書文件格式為:crt/pem)ssl_certificate_key /usr/local/etc/nginx/ssl-key/ssl.key; #ssl證書key位置location /passport {send_timeout 90;proxy_connect_timeout 50;proxy_send_timeout 90;proxy_read_timeout 90;proxy_pass http://https-svr;}location ~ ^/(res|lib)/ {root $geek_web_root;expires 7d;#add_header用于為后端服務器返回的response添加請求頭,這里通過add_header實現CROS跨域請求服務器add_header Access-Control-Allow-Origin *;}#ssl配置參數(選擇性配置)ssl_session_cache shared:SSL:1m;ssl_session_timeout 5m;}#配置訪問控制:每個IP一秒鐘只處理一個請求,超出的請求會被delayed#語法:limit_req_zone $session_variable zone=name:size rate=rate (為session會話狀態分配一個大小為size的內存存儲區,限制了每秒(分、小時)只接受rate個IP的頻率)limit_req_zone $binary_remote_addr zone=req_one:10m rate=1r/s nodelay;location /pay {proxy_set_header Host $http_host;proxy_set_header X-Real_IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #訪問控制:limit_req zone=name [burst=number] [nodelay];limit_req zone=req_one burst=5; #burst=5表示超出的請求(被delayed)如果超過5個,那些請求會被終止(默認返回503)proxy_pass http://mysvr1;}#可以把子配置文件放到/usr/local/etc/nginx/servers/路徑下,通過include引入include /usr/local/etc/nginx/servers/*.conf; }內置全局變量:
$args :這個變量等于請求行中的參數,同$query_string $content_length : 請求頭中的Content-length字段。 $content_type : 請求頭中的Content-Type字段。 $document_root : 當前請求在root指令中指定的值。 $host : 請求主機頭字段,否則為服務器名稱。 $http_user_agent : 客戶端agent信息 $http_cookie : 客戶端cookie信息 $limit_rate : 這個變量可以限制連接速率。 $request_method : 客戶端請求的動作,通常為GET或POST。 $remote_addr : 客戶端的IP地址。 $remote_port : 客戶端的端口。 $remote_user : 已經經過Auth Basic Module驗證的用戶名。 $request_filename : 當前請求的文件路徑,由root或alias指令與URI請求生成。 $scheme : HTTP方法(如http,https)。 $server_protocol : 請求使用的協議,通常是HTTP/1.0或HTTP/1.1。 $server_addr : 服務器地址,在完成一次系統調用后可以確定這個值。 $server_name : 服務器名稱。 $server_port : 請求到達服務器的端口號。 $request_uri : 包含請求參數的原始URI,不包含主機名,如:”/foo/bar.php?arg=baz”。 $uri : 不帶請求參數的當前URI,$uri不包含主機名,如”/foo/bar.html”。 $document_uri : 與$uri相同。如何驗證效果
如何確定就是本地 nginx 提供的服務呢?有 2 個方法:
- 方法一:PING
ping ip,看看是否解析到設置的url,比如http://baidu.com等
- 方法二:觀察訪問日志
查看nginx 服務器的訪問日志,看nginx 服務器是否能夠正常提供服務。
總結
以上是生活随笔為你收集整理的nginx.conf 基本配置模板和结构的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Nginx安装及其编译命令、详细教程
- 下一篇: 万惠投资上征信怎么解决 有欠款赶紧还