Nginx配置文件的基本用法

Nginx簡介

1.1概述

  • Nginx是一個高性能的HTTP和反向代理服務器。

  • 是一款輕量級的高性能的web服務器/反向代理服務器/電子郵件(IMAP/POP3)代理服務器

  • 單臺物理服務器可支持30 000~50 000個并發請求。

1.2Nginx和Apache的優缺點

(1)nginx相對于apache的優點∶

輕量級,同樣起web服務,比apache占用更少的內存及資源

抗并發,nginx處理請求是異步非阻塞的,而apache是阻塞型的在高并發下,nginx能保持低資源低消耗高性能

高度模塊化的設計,編寫模塊相對簡

(2)apache相對于nginx的優點∶

Rewrite比nginx的rewrite強大 (rewrite的主要功能就是實現統一資源定位符URL的跳轉)

模塊多,基本想到的都可以找到

少bug, nginx的bug相對較多

超穩定

存在的理由:一般來說,需要性能的web服務,用nginx。若不需要性能只求穩定,就選用apache

1.3Nginx作為web服務器與Apache比較

相比apache,nginx使用更少的資源,支持更多的并發連接,體現更高的效率。

Nginx作為負載均衡服務器:nginx既可以在內部直接支持rails和php程序對外進行服務,也可以支持http代理服務器對外進行服務。

Nginx采用C進行編寫,不論是系統資源開銷還是CPU使用效率都比較好。

作為郵件代理服務器:最早開發這個產品的目的之一也是作為郵件代理服務器。

apache是同步多進程模型,一個連接對應一個進程,nginx是異步的,多個連接可以對應一個進程。

Nginx處理靜態文件好,耗費內存少,只適合靜態和反向。

Apache在處理動態有優勢,

nginx并發性比較好,CPU占用內存低,如果rewrite頻繁,選用apache最佳。

總的來說,apache依然是大部分公司的首選。

1.4nginx的工作原理

內核和模塊的組成

·Nginx 本身做的工作實際很少,當它接到一個 HTTP 請求時, 它僅僅是通過查找配置文件將此次請求映射到一個 location block,而此 location 中所配 置的各個指令則會啟動不同的模塊去完成工作,因此模塊可以看做 Nginx 真正的勞動工作者。 ·通常一個 location 中的指令會涉及一個 handler 模塊和多個 filter 模塊(當然,多個 location 可以復用同一個模塊)。handler 模塊負責處理請求,完成響應內容的生成,而 filter 模塊對響應內容進行處理。 用戶根據自己的需要所開發的模塊都屬于第三方模塊。正是有了這么多模塊的支撐, Nginx 的功能才會如此強大。

分為三種模塊

·核心模塊:HTTP 模塊、EVENT 模塊和 MAIL 模塊; ·基礎模塊:HTTP Access 模塊、HTTP FastCGI 模塊、HTTP Proxy 模塊和 HTTP Rewrite 模塊; ·第三方模塊:HTTP Upstream Request Hash 模塊、Notice 模塊和 HTTP Access Key 模 塊。

nginx的模塊從功能

Handlers(處理器模塊) :此類模塊直接處理請求,并進行輸出內容和修改 headers 信息等操作。Handlers 處理器模塊一般只能有一個;

Filters(過濾器模塊) ::此類模塊主要對其他處理器模塊輸出的內容進行修改操作,最后由 Nginx 輸出;

Proxies(代理類模塊) :此類模塊是 Nginx 的 HTTP Upstream 之類的模塊,這些模塊主要與后端一些服務比如 FastCGI 等進行交互,實現服務代理和負載均衡等功能。

2 Nginx的編譯安裝

2.1關閉防火墻,將安裝nginx所需軟件包傳到/data目錄下

2.2安裝軟件所需的依賴包

yum -y install pcre-devel zlib-devel openssl-devel gcc

2.3創建運行的用戶、組(Nginx 服務程序默認以 nobody 身份運行,建議為其創建專門的用戶賬號,以便更準確地控制其訪問權限)

useradd -M -s /sbin/nologin nginx

2.4編譯安裝nginx

cd /opt
tar zxvf nginx-1.12.0.tar.gz -C /opt/
cd nginx-1.12.0/
./configure \
--prefix=/usr/local/nginx \ #指定nginx的安裝路徑
--user=nginx \ #指定用戶名
--group=nginx \ #指定組名
--with-http_stub_status_module #啟用 http_stub_status_module 模塊以支持狀態統計
make && make install

3 Nginx的配置

3.1nginx的配置文件

vim /usr/local/nginx/sbin/nginx

3.2nginx服務基本應用

nginx -t 檢查配置文件是否配置正確
開啟:nginx
停止:cat /usr/local/nginx/logs/nginx.pid
kill -3 <PID號>
kill -s QUIT <PID號>
killall -3 nginx
killall -s QUIT nginx
重載:
kill -1 <PID號>
kill -s HUP <PID號>
killall -1 nginx
killall -s HUP nginx
平滑升級:
kill -USR2 <PID號>
tar -zxvf nginx-1.xx.xx.tar.gz
cd nginx-1.xx.xx
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module
--with-http_ssl_module
make
mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx_old
cp objs/nginx /usr/local/nginx/sbin/nginx
make upgrade #要保證當前 nginx 進程是通過 /usr/local/nginx/sbin/nginx 啟動的,而不是通過查找環境變量中那個 nginx 命令啟動的
或者先 killall nginx ,再/usr/local/nginx/sbin/nginx

3.3添加nginx系統服務

vim /etc/init.d/nginx

給文件添加執行權限、添加為系統服務、啟動nginx服務

方法2:
vim /lib/systemd/system/nginx.service

添加權限并啟動服務

4 Nginx服務的主配置

4.1nginx服務的主配置文件

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

1、全局塊:全局配置,對全局生效; 2、events塊:配置影響 Nginx 服務器與用戶的網絡連接; 3、http塊:配置代理,緩存,日志定義等絕大多數功能和第三方模塊的配置; 4、server塊:配置虛擬主機的相關參數,一個 http 塊中可以有多個 server 塊; 5、location塊:用于配置匹配的 uri ; 6、upstream:配置后端服務器具體地址,負載均衡配置不可或缺的部分。

4.2nginx的全局配置

4.3I/O事件配置

如果需要提高每個進程的鏈接數還需要執行ulimit -n 65535 命令臨時修改本地的每個進程可以同時打開的最大文件數量。

永久修改本地的每個進程可以同時打開的最大文件數量/etc/security/limits.conf

可以使用ulimit -a查看系統允許當前用戶打開的文件數限制

在linux平臺上,在進行高并發tcp連接處理室,最高的并發數量都要受到系統對用戶單一進程同時可額打開的文件數量做限制(這是因為系統的每個tcp連接都要創建一個socket句柄,每個socket句柄同時也是一個文件句柄)

epoll時linux系統內核為處理大批句柄二改進的poll,是linux下多路復用IO接口select/poll的增強版本,阿能顯著的減少程序在大并發連接中只有少量的活躍的情況下的cpu系統利用率。

work_rpocesses的值和work_connections的值決定了最大并發數量,最大并發數的計算方式為:worker_processes*worker_connections。但在反向代理場景中計算方法不同,因為nginx機要維持和客戶端的連接,又要維持后后端服務器端連接,因此處理一次連接要占用兩個連接,

所以最大并發數計算方式為:worker_processes*worker_connections/2。

4.4HTTP配置

4.5日志格式設定

$remote_addr與$http_x_forwarded_for用以記錄客戶端的ip地址; $remote_user:用來記錄客戶端用戶名稱; $time_local: 用來記錄訪問時間與時區; $request: 用來記錄請求的url與http協議; $status: 用來記錄請求狀態;成功是200, $body_bytes_sent :記錄發送給客戶端文件主體內容大小; $http_referer:用來記錄從哪個頁面鏈接訪問過來的; $http_user_agent:記錄客戶瀏覽器的相關信息;

通常web服務器放在反向代理的后面,這樣就不能獲取到客戶的IP地址了,通過$remote_add拿到的IP地址是反向代理服務器的iP地址。反向代理服務器在轉發請求的http頭信息中,可以增加x_forwarded_for信息,用以記錄原有客戶端的IP地址和原來客戶端的請求的服務器地址。

location常見配置指令:root、alias、proxy_pass root(根路徑配置):root /var/www/html 請求www.kgc.com/test/1.html,會返回文件/var/www/html/test/1.html

alias(別名配置):alias /var/www/html 請求www.kgc.com/test/1.html,會返回文件/var/www/html/1.html

proxy_pass(反向代理配置)

4.6訪問狀態統計配置

1.先使用命令/usr/local/nginx/sbin/nginx -V 查看已安裝的 Nginx 是否包含 HTTP_STUB_STATUS 模塊

--with-http_stub_status_module

cat /opt/nginx-1.12.0/auto/options | grep YES #可查看 nginx 已安裝的所有模塊

2.修改 nginx.conf 配置文件,指定訪問位置并添加 stub_status 配置

3.重啟服務,訪問測試

4.7基于客戶端的訪問控制

訪問控制規則如下:
deny IP/IP 段:拒絕某個 IP 或 IP 段的客戶端訪問。
allow IP/IP 段:允許某個 IP 或 IP 段的客戶端訪問。
規則從上往下執行,如匹配則停止,不再往下匹配。
修改nginx配置文件

4.8基于域名的nginx的虛擬主機

1.為虛擬主機提供域名解析

2.為虛擬主機準備網頁文檔

3.修改nginx的配置文件

4.重啟服務訪問測試

4.9基于IP的nginx虛擬主機

1.修改nginx配置文件為不同主機地址

2.臨時設置一個網卡用作實驗并重啟服務測試

4.10基于端口的nginx虛擬主機

1.vim /usr/local/nginx/conf/nginx.conf修改配置文件端口號

2.重啟網卡并測試

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/214438.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/214438.shtml
英文地址,請注明出處:http://en.pswp.cn/news/214438.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

mybatis數據輸出-insert操作時獲取自增列的值給對應的屬性賦值

jdbc-修改 水果庫存系統的 BaseDao 的 executeUpdate 方法支持返回自增列-CSDN博客 1、建庫建表 CREATE DATABASE mybatis-example;USE mybatis-example;CREATE TABLE t_emp(emp_id INT AUTO_INCREMENT,emp_name CHAR(100),emp_salary DOUBLE(10,5),PRIMARY KEY(emp_id) );INSE…

王炸升級!PartyRock 10分鐘構建 AI 應用

前言 一年一度的亞馬遜云科技的 re:Invent 可謂是全球云計算、科技圈的狂歡&#xff0c;每次都能帶來一些最前沿的方向標&#xff0c;這次也不例外。在看完一些 keynote 和介紹之后&#xff0c;我也去親自體驗了一些最近發布的內容。其中讓我感受最深刻的無疑是 PartyRock 了。…

基于SSM的健身房預約系統設計與實現

末尾獲取源碼 開發語言&#xff1a;Java Java開發工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 數據庫&#xff1a;MySQL5.7和Navicat管理工具結合 服務器&#xff1a;Tomcat8.5 開發軟件&#xff1a;IDEA / Eclipse 是否Maven項目&#xff1a;是 目錄…

網絡安全攻擊預警/態勢預測算法匯總

總結&#xff1a; 網絡安全攻擊預警/態勢預測算法眾多&#xff0c;主要包括&#xff1a; 基于統計學的算法&#xff1a;協方差矩陣、馬爾可夫模型等&#xff1b; 基于機器學習的算法&#xff1a;貝葉斯網絡、聚類算法、支持向量機SVM、遺傳算法、層次分析法AHP、決策樹等&am…

每日一道算法題 1

借鑒文章&#xff1a;Java-敏感字段加密 - 嗶哩嗶哩 題目描述 給定一個由多個命令字組成的命令字符串&#xff1b; 1、字符串長度小于等于127字節&#xff0c;只包含大小寫字母&#xff0c;數字&#xff0c;下劃線和偶數個雙引號 2、命令字之間以一個或多個下劃線_進行分割…

Proxmark3 Easy救磚-20231209

事情是這樣的&#xff0c;在淘寶買了個PM3&#xff0c;拿到手后刷固件的&#xff0c;一不小心刷成磚頭了&#xff0c;現象就是四個燈全亮&#xff0c;插上電腦USB不識別。問商家他也不太懂&#xff0c;也是個半吊子技術&#xff0c;遠程給我刷機搞了半天也沒有搞定&#xff0c;…

微表情檢測(三)----基于光流特征的微表情檢測

Micro-expression spotting based on optical flow features 基于光流特征的微表情檢測 Abstract 本文提出了一種高精度和可解釋性的自動微表情檢測方法。首先&#xff0c;我們設計了基于鼻尖位置的圖像對齊方法&#xff0c;以消除由頭部晃動引起的全局位移。其次&#xff0…

C語言中的一維數組與二維數組

目錄 一維數組數組的創建初始化使用在內存中的存儲 二維數組創建初始化使用在內存中的存儲 數組越界 一維數組 數組的創建 數組是一組相同類型元素的集合。 int arr1[10]; char arr3[10]; float arr4[10]; double arr5[10];下面這個數組能否成功創建&#xff1f; int count…

Linux上編譯和測試V8引擎源碼

介紹 V8引擎是一款高性能的JavaScript引擎&#xff0c;廣泛應用于Chrome瀏覽器和Node.js等項目中。在本篇博客中&#xff0c;我們將介紹如何在Linux系統上使用depot_tools工具編譯和測試V8引擎源碼。 步驟一&#xff1a;安裝depot_tools depot_tools是一個用于Chromium開發…

學習IO的第七天

作業&#xff1a;使用消息隊列完成兩個進程間的相互通信 #include <head.h>struct msgbuf {long mtype; //消息類型char mtext[1024]; //正文大小 };#define SIZE (sizeof(struct msgbuf)-sizeof(long))int main(int argc, const char *argv[]) {//1.創…

打印一個整數的每一位和求階乘(遞歸和非遞歸的C語言實現)

文章目錄 打印一個整數的每一位思考遞歸非遞歸 求階乘遞歸非遞歸證明0的階乘為1 寫代碼中遇到的VS輸出窗口提示信息為什么VS平臺32位和64位的long都是4字節&#xff1f;%zu是什么格式說明符VS下_int128為什么用不了 打印一個整數的每一位 思考 負數和0都是整數&#xff0c;我…

DevEco Studio將編輯器整體文本改為簡體中文

我們打開編輯器 隨便進入一個項目 這里 我們左上角目錄 選擇 File下面菜單中的 Settings… 打開配置界面 然后在設置窗口左側導航欄中 選擇 Plugins 插件 然后上方導航欄中 選擇 Installed 參考下圖 然后 找到這個Chinese(Simplified) Chinese是什么應該不用我多說吧 我們把…

區塊鏈擴容問題研究【06】

1.Plasma&#xff1a;Plasma 是一種基于以太坊區塊鏈的 Layer2 擴容方案&#xff0c;它通過建立一個分層結構的區塊鏈網絡&#xff0c;將大量的交易放到子鏈上進行處理&#xff0c;從而提高了以太坊的吞吐量。Plasma 還可以通過智能合約實現跨鏈交易&#xff0c;使得不同的區塊…

Python面經【8】- Python設計模式專題-上卷

Python面經【8】- Python設計模式專題-上卷 一、接口二、單例模式(1) 方法一&#xff1a;使用模塊(2) 方法二&#xff1a; 裝飾器實現【手撕 理解】&#xff08;單下劃線 閉包 裝飾器 類方法&#xff09;(3) 方法三&#xff1a;基于__new__方法【new和init 】 設計模式是一…

簡單的 u-popup 彈出框

uniapp中的popup組件可以用于彈出簡單的提示框、操作框、菜單等。它可以通過position屬性控制彈出框的位置&#xff0c;不同的position值會使得彈出框呈現不同的彈出形式 目錄 一、實現思路 二、實現步驟 ①view部分展示 ②JavaScript 內容 ③css中樣式展示 三、效果展示 …

Linux系統---基于Pipe實現一個簡單Client-Server system

顧得泉&#xff1a;個人主頁 個人專欄&#xff1a;《Linux操作系統》 《C/C》 《LeedCode刷題》 鍵盤敲爛&#xff0c;年薪百萬&#xff01; 一、題目要求 Server是一個服務器進程&#xff0c;只能進行整數平方運算。Client要計算一個整數的平方的平方的平方&#xff0c;即…

聊聊 Jetpack Compose 原理 -- 穿透刺客 CompositionLocal

Compose 官方說明一直很簡潔&#xff1a;CompositionLocal 是通過組合隱式向下傳遞數據的工具。 我們先來看一段代碼&#xff1a; class MainActivity : ComponentActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setCo…

datav-輪播排名-對數據進行處理

前言 對于大屏需求我們排名數據輪播也是經常需要用到的需求&#xff0c;datav也是給我們提供了 不是說我們自己不能寫&#xff0c;而是提供好的輪子比我們自己 寫的&#xff0c;更全面&#xff0c;更周到&#xff0c; 沒有特殊需求的話&#xff0c;使用datav配置一下完成這個…

mysqlsh導入json,最終還得靠navicat導入json

工作需要將一個巨大的10G的json導入mysql數據庫。 看到mysql官方有對json導入的支持。 如下&#xff1a; MySQL :: Import JSON to MySQL made easy with the MySQL Shell $ mysqlsh rootlocalhost:33300/test --import /path_to_file/zips.json Creating a session to root…

產品經理進階:以客戶為中心的8個維度

目錄 簡介 以客戶為中心 流程和組織維度 產品維度 CSDN學院《硬件產品進階課》