1. 程式人生 > >《深入理解Nginx》閱讀與實踐(一):Nginx安裝配置與HelloWorld

《深入理解Nginx》閱讀與實踐(一):Nginx安裝配置與HelloWorld

#include <ngx_config.h> #include <ngx_core.h> #include <ngx_http.h> static char* ngx_http_mytest(ngx_conf_t *cf,ngx_command_t *cmd, void *conf); static ngx_int_t ngx_http_mytest_handler(ngx_http_request_t *r); static char* ngx_http_mytest(ngx_conf_t *cf,ngx_command_t *cmd, void
*conf) { ngx_http_core_loc_conf_t *clcf; clcf = ngx_http_conf_get_module_loc_conf(cf,ngx_http_core_module); clcf->handler = ngx_http_mytest_handler; return NGX_CONF_OK; } static ngx_command_t ngx_http_mytest_commands[] = { { ngx_string("mytest"), NGX_HTTP_MAIN_CONF
|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_HTTP_LMT_CONF|NGX_CONF_NOARGS, ngx_http_mytest, NGX_HTTP_LOC_CONF_OFFSET, 0, NULL }, ngx_null_command }; static ngx_http_module_t ngx_http_mytest_module_ctx = { NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL }; ngx_module_t ngx_http_mytest_module
= { NGX_MODULE_V1, &ngx_http_mytest_module_ctx, ngx_http_mytest_commands, NGX_HTTP_MODULE, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NGX_MODULE_V1_PADDING }; static ngx_int_t ngx_http_mytest_handler(ngx_http_request_t *r) { if(!(r->method & (NGX_HTTP_GET|NGX_HTTP_HEAD))) { return NGX_HTTP_NOT_ALLOWED; } ngx_int_t rc = ngx_http_discard_request_body(r); if(rc!=NGX_OK) { return rc; } ngx_str_t type = ngx_string("text/plain"); ngx_str_t response = ngx_string("Hello World!"); r->headers_out.status = NGX_HTTP_OK; r->headers_out.content_length_n = response.len; r->headers_out.content_type = type; rc = ngx_http_send_header(r); if(rc == NGX_ERROR || rc> NGX_OK || r->header_only) { return rc; } ngx_buf_t *b; b = ngx_create_temp_buf(r->pool,response.len); if(b==NULL) { return NGX_HTTP_INTERNAL_SERVER_ERROR; } ngx_memcpy(b->pos,response.data,response.len); b->last = b->pos + response.len; b->last_buf = 1; ngx_chain_t out; out.buf = b; out.next = NULL; return ngx_http_output_filter(r,&out); }

相關推薦

深入理解Nginx閱讀實踐Nginx安裝配置HelloWorld

#include <ngx_config.h> #include <ngx_core.h> #include <ngx_http.h> static char* ngx_http_mytest(ngx_conf_t *cf,ngx_command_t *cmd,

深入理解java虛擬機器系列java記憶體區域記憶體溢位異常

文章主要是閱讀《深入理解java虛擬機器:JVM高階特性與最佳實踐》第二章:Java記憶體區域與記憶體溢位異常 的一些筆記以及概括。 好了開始。如果有什麼錯誤或者遺漏,歡迎指出。 一、概述 先上一張圖 這張圖主要列出了Java虛擬機器管理的記憶體的幾個區域。 常有人

深入理解Spark 2.1 Core RDD的原理原始碼分析

本文連結:http://blog.csdn.net/u011239443/article/details/53894611 該論文來自Berkeley實驗室,英文標題為:Resilient Distributed Datasets: A Fault-Toler

Redis筆記整理Redis安裝配置數據類型操作

數據庫 NoSQL Redis [TOC] Redis筆記整理(一):Redis安裝配置與數據類型操作 Redis簡介 Redis是一個開源(BSD許可),內存存儲的數據結構服務器,可用作數據庫,高速緩存和消息隊列代理。 它支持字符串、哈希表、列表、集合、有序集合,位圖,hyperloglo

Webpack原理實踐打包流程

寫在前面的話 在閱讀 webpack4.x 原始碼的過程中,參考了《深入淺出webpack》一書和眾多大神的文章,結合自己的一點體會,總結如下。 總述 webpack 就像一條生產線,要經過一系列處理流程後才能將原始檔轉換成輸出結果。 這條生產線上的每個處理流程的職責都是單一的,多個流程之間有存在依賴關

ActiveAndroid 下載、配置建立

專案地址:https://github.com/pardom/ActiveAndroid ActiveAndroid是一個輕量級的ORM框架,用ActiveAndroid能夠更快速地對資料庫進行增刪改查的操作(不用寫SQL語句),每一個數據記錄都可以通過save()和de

JVM高階特性實踐十三執行緒實現 Java執行緒排程

一. 執行緒的實現 執行緒其實是比程序更輕量級的排程執行單位。執行緒的引入,可以把一個檢查的資源分配和執行排程分開,各個執行緒既可以共享資源(記憶體地址、檔案I/O等),又可以獨立排程(執行緒是CPU排程的基本單位)。 執行緒實現 還是 Java執行

Nginx原始碼分析實踐---編寫一個簡單的Http模組

在上一節中,我們通過修改配置檔案,便能讓nginx去訪問我們寫的html檔案,並返回給瀏覽器。問題是:nginx是如何檢測到我們寫的配置項的?檢測到後,nginx又是如何知道該進行什麼操作的? 本節通過親自實踐,寫一個經典的Hello World模組來了解相應的流程是如何進行的。我們採用自上

Kotlin學習實踐 基礎

eat 代碼塊 數據 eas 特性 neu 簡潔 跟著 pla 1、 函數和變量 直奔主題不啰嗦 * a.關鍵字 fun 用來聲明函數。* b.參數的類型寫在參數名字的後面。* c.函數可以定義再文件的最外層,不需要把它放入類中。* d.數組就是類。 和Java不同Kotl

Docker學習實踐

docker一、docker的安裝 1.依賴包安裝 yum install -y yum-utils device-mapper-persistent-data lvm2 2.添加yum源 yum-config-manager --add-repo https://mirrors.ustc.edu.cn/do

mysql數據庫索引優化實踐

都是 分鐘 必備 範圍查詢 無法使用 RM strong span 實踐 前言 mysql數據庫是現在應用最廣泛的數據庫系統。與數據庫打交道是每個Java程序員日常工作之一,索引優化是必備的技能之一。 為什麽要了解索引 真實案例 案例一:大學有段時間學習爬蟲,爬取了知乎30

深入理解計算機系統配套實驗 data lab 函式詳解

/* 135. * bitAnd - x&y using only ~ and | 136. * Example: bitAnd(6, 5) = 4 137. * Legal ops: ~ | 138. * Max ops: 8 139. *

深入理解Java類載入機制

1 前言: 在上一篇文章一文讓你明白 Java 位元組碼中, 我們瞭解了java位元組碼的解析過程,那麼在接下來的內容中,我們來了解一下類的載入機制。 2 題外話 Java的核心是什麼?當然是JVM了,所以說了解並熟悉JVM對於我們理解Java語言非常重要,不管你是做Java還是Andr

深入理解Java多執行緒

關於java多執行緒的概念以及基本用法:java多執行緒基礎 1,停止執行緒 停止執行緒意味著線上程執行完之前停止正在做的操作,即立刻放棄當前的操作,這並不容易。停止執行緒可以用Thread.stop()方法,但是這個方法不安全,所以不建議使用,還有一個方法就是Thre

前後端分離的思考實踐

也談基於NodeJS的全棧式開發(基於NodeJS的前後端分離) 前言 為了解決傳統Web開發模式帶來的各種問題,我們進行了許多嘗試,但由於前/後端的物理鴻溝,嘗試的方案都大同小異。痛定思痛,今天我們重新思考了“前後端”的定義,引入前端同學都熟悉的NodeJS,試圖探索一條全新的前後端分

讀書筆記《深入理解Java虛擬機器》 物件已死?記憶體分配策略

物件是否可回收 引用計數演算法 給物件新增一個引用計數器,每當有一個地方引用它時,計數器值就加1;當引用失效時就減1;當等於0時就認為物件不可能再被使用。問題:當兩個物件相互引用時,就無法回收了。 可達性分析演算法 通過一系列的稱為“GC Roots”的物件作為起

讀書筆記《深入理解Java虛擬機器》 JAVA記憶體區域

  .結構圖來自原書 執行緒私有區域 程式計數器 虛擬機器棧 本地方法棧 所有執行緒共享 方法區 堆   程式計數器(執行緒私有) 是一塊較小的記憶體空間,可以看做是當前執行緒所執行的位元組碼的行號

深入理解JVM之前端編譯器

前兩天在leetcode做了演算法題,驚訝的發現用java實現的時間複雜度,竟然躋身於C/C++同列,甚至偶爾會超過後兩者,雖然知道JVM功不可沒,但還是很好奇在VM編譯過程中到底發生了什麼,翻出《深入理解java虛擬機器》一探究竟,算是有所收穫,記錄如下。 概述 jav

看透SpringMVC原始碼分析實踐

一、網站架構及其演變過程   1.軟體的三大型別          軟體分為三個型別:單機軟體、BS結構的軟體(瀏覽器-服務端)、CS結構的軟體(客戶端-服務端)。 2.BS的基礎結構     &nb

分散式鏈路監控追蹤分析實踐

背景 隨著網際網路架構的擴張,分散式系統變得日趨複雜,越來越多的元件開始走向分散式化,如微服務、訊息收發、分散式資料庫、分散式快取、分散式物件儲存、跨域呼叫,這些元件共同構成了繁雜的分散式網路,那現在的問題是一個請求經過了這些服務後其中出現了一個呼叫失敗的問題,只知道有異常