nginx簡介與配置

来源:https://www.cnblogs.com/lynk/archive/2019/03/01/10454565.html
-Advertisement-
Play Games

nginx簡介 nginx(發音同engine x)是一款輕量級的Web伺服器/反向代理伺服器及電子郵件(IMAP/POP3)代理伺服器,併在一個BSD like協議下發行。 nginx由俄羅斯的程式設計師Igor Sysoev所開發,最初供俄國大型的入口網站及搜尋引擎Rambler使用。 第一個公 ...


nginx簡介

nginx(發音同engine x)是一款輕量級的Web伺服器/反向代理伺服器及電子郵件(IMAP/POP3)代理伺服器,併在一個BSD-like協議下發行。

nginx由俄羅斯的程式設計師Igor Sysoev所開發,最初供俄國大型的入口網站及搜尋引擎Rambler使用。

第一個公開版本0.1.0發佈於2004年10月4日。其將源代碼以類BSD許可證的形式發佈,因它的穩定性、豐富的功能集、示例配置文件和低系統資源的消耗而聞名。2011年6月1日,nginx 1.0.4發佈。

nginx的特點是占有記憶體少,併發能力強,事實上nginx的併發能力確實在同類型的網頁伺服器中表現較好,中國大陸使用nginx網站用戶有:百度、京東、新浪、網易、騰訊、淘寶等。

nginx的特性與優點

nginx的特性

nginx是一個很牛的高性能Web和反向代理伺服器,它具有很多非常優越的特性:

  • 在高連接併發的情況下,nginx是Apache伺服器不錯的替代品,能夠支持高達50000個併發連接數的響應
  • 使用epoll and kqueue作為開發模型
  • nginx作為負載均衡伺服器:nginx既可在內部直接支持和PHP程式對外進行服務,也可支持作為HTTP代理伺服器對外進行服務
  • nginx採用C進行編寫,不論系統資源開銷還是CPU使用效率都比Perlbal要好很多

nginx的優點

  • 高併發連接:官方測試能夠支撐5萬併發連接,在實際生產環境中跑到2-3萬併發連接數
  • 記憶體消耗少:在3萬併發連接下,開啟的10個nginx進程才消耗150M記憶體(15M*10=150M)
  • 配置文件非常簡單:風格跟程式一樣通俗易懂
  • 成本低廉:nginx為開源軟體,可以免費使用。而購買F5 BIG-IP、NetScaler等硬體負載均衡交換機則需要十多萬至幾十萬人民幣
  • 支持Rewrite重寫規則:能夠根據功能變數名稱、URL的不同,將HTTP請求分到不同的後端伺服器群組
  • 內置的健康檢查功能:如果Nginx Proxy後端的某台Web伺服器宕機了,不會影響前端訪問
  • 節省帶寬:支持GZIP壓縮,可以添加瀏覽器本地緩存的Header頭
  • 穩定性高:用於反向代理,宕機的概率微乎其微
  • 模塊化設計:模塊可以動態編譯
  • 外圍支持好:文檔全,二次開發和模塊較多
  • 支持熱部署:可以不停機重載配置文件
  • 支持事件驅動、AIO(AsyncIO,非同步IO)、mmap(Memory Map,記憶體映射)等性能優化

nginx的功能及應用類別

nginx的基本功能

  • 靜態資源的web伺服器,能緩存打開的文件描述符
  • http、smtp、pop3協議的反向代理伺服器
  • 緩存加速、負載均衡
  • 支持FastCGI(fpm,LNMP),uWSGI(Python)等
  • 模塊化(非DSO機制),過濾器zip、SSI及圖像的大小調整
  • 支持SSL

nginx的擴展功能

  • 基於名稱和IP的虛擬主機
  • 支持keepalive
  • 支持平滑升級
  • 定製訪問日誌、支持使用日誌緩衝區提高日誌存儲性能
  • 支持URL重寫
  • 支持路徑別名
  • 支持基於IP及用戶的訪問控制
  • 支持速率限制,支持併發數限制

nginx的應用類別

  • 使用nginx結合FastCGI運行PHP、JSP、Perl等程式
  • 使用nginx作反向代理、負載均衡、規則過濾
  • 使用nginx運行靜態HTML網頁、圖片
  • nginx與其他新技術的結合應用

nginx的模塊與工作原理

nginx由內核和模塊組成。其中,內核的設計非常微小和簡潔,完成的工作也非常簡單,僅僅通過查找配置文件將客戶端請求映射到一個location block(location是nginx配置中的一個指令,用於URL匹配),而在這個location中所配置的每個指令將會啟動不同的模塊去完成相應的工作。

nginx的模塊分類

nginx的模塊從結構上分為核心模塊、基礎模塊和第三方模塊

  • HTTP模塊、EVENT模塊和MAIL模塊等屬於核心模塊
  • HTTP Access模塊、HTTP FastCGI模塊、HTTP Proxy模塊和HTTP Rewrite模塊屬於基本模塊
  • HTTP Upstream模塊、Request Hash模塊、Notice模塊和HTTP Access Key模塊屬於第三方模塊

用戶根據自己的需要開發的模塊都屬於第三方模塊。正是有瞭如此多模塊的支撐,nginx的功能才會如此強大

nginx模塊從功能上分為三類,分別是:

  • Handlers(處理器模塊)。此類模塊直接處理請求,併進行輸出內容和修改headers信息等操作。handlers處理器模塊一般只能有一個
  • Filters(過濾器模塊)。此類模塊主要對其他處理器模塊輸出的內容進行修改操作,最後由nginx輸出
  • Proxies(代理器模塊)。就是nginx的HTTP Upstream之類的模塊,這些模塊主要與後端一些服務比如fastcgi等操作交互,實現服務代理和負載均衡等功能

nginx模塊分為:核心模塊、事件模塊、標準Http模塊、可選Http模塊、郵件模塊、第三方模塊和補丁等

  • nginx基本模塊:所謂基本模塊,指的是nginx預設的功能模塊,它們提供的指令,允許你使用定義nginx基本功能的變數,在編譯時不能被禁用,包括:
  • 核心模塊:基本功能和指令,如進程管理和安全。常見的核心模塊指令,大部分是放置在配置文件的頂部
  • 事件模塊:在Nginx內配置網路使用的能力。常見的events(事件)模塊指令,大部分是放置在配置文件的頂部
  • 配置模塊:提供包含機制

具體的指令,請參考nginx的官方文檔

nginx的工作原理

nginx的模塊直接被編譯進nginx,因此屬於靜態編譯方式。

啟動nginx後,nginx的模塊被自動載入,與Apache不一樣,首先將模塊編譯為一個so文件,然後在配置文件中指定是否進行載入。

在解析配置文件時,nginx的每個模塊都有可能去處理某個請求,但是同一個處理請求只能由一個模塊來完成。

nginx的進程架構:
啟動nginx時,會啟動一個Master進程,這個進程不處理任何客戶端的請求,主要用來產生worker線程,一個worker線程用來處理n個request。

nginx的配置文件詳解

主配置文件:/usr/local/nginx/conf/nginx.conf

  • 預設啟動nginx時,使用的配置文件是:安裝路徑/conf/nginx.conf文件
  • 可以在啟動nginx時通過-c選項來指定要讀取的配置文件

nginx常見的配置文件及其作用

配置文件 作用
nginx.conf nginx的基本配置文件
mime.types MIME類型關聯的擴展文件
fastcgi.conf 與fastcgi相關的配置
proxy.conf 與proxy相關的配置
sites.conf 配置nginx提供的網站,包括虛擬主機

6.1 nginx.conf配置詳解

nginx.conf的內容分為以下幾段:

  • main配置段:全局配置段。其中main配置段中可能包含event配置段
  • event {}:定義event模型工作特性
  • http {}:定義http協議相關的配置

配置指令:要以分號結尾,語法格式如下:

derective value1 [value2 ...]

支持使用變數:

  • 內置變數:模塊會提供內建變數定義
  • 自定義變數:set var_name value

用於調試、定位問題的配置參數

daemon {on|off};            #是否以守護進程方式運行nginx,調試時應設置為off
master_process {on|off};    #是否以master/worker模型來運行nginx,調試時可以設置為off
error_log 位置 級別;         #配置錯誤日誌

error_log里的位置和級別能有以下可選項:

  • 位置
    • file
    • stderr
    • syslog:server=address[,parameter=value]
    • memory:size
  • 級別
    • debug(若要使用debug級別,需要在編譯nginx時使用--with-debug選項)
    • info
    • notice
    • warn
    • error
    • crit
    • alert
    • emerg

正常運行必備的配置參數

user USERNAME [GROUPNAME];   #指定運行worker進程的用戶和組
pid /path/to/pid_file;       #指定nginx守護進程的pid文件
worker_rlimit_nofile number; #設置所有worker進程最大可以打開的文件數,預設為1024
worker_rlimit_core size;     #指明所有worker進程所能夠使用的總體的最大核心文件大小,保持預設即可

優化性能的配置參數

worker_processes n;                #啟動n個worker進程,這裡的n為了避免上下文切換,通常設置為cpu總核心數-1或等於總核心數
worker_cpu_affinity cpumask ...;   #將進程綁定到某cpu中,避免頻繁刷新緩存
#cpumask:使用8位二進位表示cpu核心,如:
    0000 0001     #第一顆cpu核心
    0000 0010     #第二顆cpu核心
    0000 0100     #第三顆cpu核心
    0000 1000     #第四顆cpu核心
    0001 0000     #第五顆cpu核心
    0010 0000     #第六顆cpu核心
    0100 0000     #第七顆cpu核心
    1000 0000     #第八顆cpu核心
timer_resolution interval;         #計時器解析度。降低此值,可減少gettimeofday()系統調用的次數
worker_priority number;            #指明worker進程的nice值

事件相關的配置:event{}段中的配置參數

accept_mutex {off|on};                  #master調度用戶請求至各worker進程時使用的負載均衡鎖;on表示能讓多個worker輪流地、序列化地去響應新請求
lock_file file;                         #accept_mutex用到的互斥鎖鎖文件路徑
use [epoll | rtsig | select | poll];    #指明使用的事件模型,建議讓nginx自行選擇
worker_connections #;                   #每個進程能夠接受的最大連接數

網路連接相關的配置參數

keepalive_timeout number;               #長連接的超時時長,預設為75s
keepalive_requests number;              #在一個長連接上所能夠允許請求的最大資源數
keepalive_disable [msie6|safari|none];  #為指定類型的UserAgeng禁用長連接
tcp_nodelay on|off;                     #是否對長連接使用TCP_NODELAY選項,為了提升用戶體驗,通常設為on
client_header_timeout number;           #讀取http請求報文首部的超時時長
client_body_timeout number;             #讀取http請求報文body部分的超時時長
send_timeout number;                    #發送響應報文的超時時長

fastcgi的相關配置參數

LNMP:php要啟用fpm模型
配置示例如下:

location ~ \.php$ {
  root html;
  fastcgi_pass 127.0.0.1:9000; #定義反向代理
  fastcgi_index index.php;
  fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
  include fastcgi_params;
}

常需要進行調整的參數

worker_processes
worker_connections
worker_cpu_affinity
worker_priority

nginx作為web伺服器時使用的配置:http{}段的配置參數

http{...}:配置http相關,由ngx_http_core_module模塊引入。nginx的HTTP配置主要包括四個區塊,結構如下:

http {               #協議級別
  include mime.types;
  default_type application/octet-stream;
  keepalive_timeout 65;
  gzipon;
  upstream {         #負載均衡配置
    ...
  }
  server {           #伺服器級別,每個server類似於httpd中的一個<VirtualHost>
    listen80;
    server_name localhost;
    location / {     #請求級別,類似於httpd中的<Location>,用於定義URL與本地文件系統的映射關係
      root html;
      index index.html index.htm;
    }
  }
}

http{}段配置指令:
server {}:定義一個虛擬主機,示例如下:

server {
  listen 80;
  server_name www.idfsoft.com;
  root "/vhosts/web";
}

listen:指定監聽的地址和埠

listen address[:port];
listen port;

server_name NAME [...]; 後面可跟多個主機,名稱可使用正則表達式或通配符

當有多個server時,匹配順序如下:

  1. 先做精確匹配檢查
  2. 左側通配符匹配檢查,如*.idfsoft.com
  3. 右側通配符匹配檢查,如mail.*
  4. 正則表達式匹配檢查,如~ ^.*.idfsoft.com$
  5. default_server
  • root path; 設置資源路徑映射,用於指明請求的URL所對應的資源所在的文件系統上的起始路徑
  • alias path; 用於location配置段,定義路徑別名
  • index file; 預設主頁面
index index.php index.html;
  • error_page code [...] [=code] URI | @name 根據http響應狀態碼來指明特用的錯誤頁面,例如 error_page 404 /404_customed.html
  • [=code]:以指定的響應碼進行響應,而不是預設的原來的響應,預設表示以新資源的響應碼為其響應碼,例如 error_page 404 =200 /404_customed.html
  • log_format定義日誌格式
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  logs/access.log  main;
#註意:此處可用變數為nginx各模塊內建變數

location區段,通過指定模式來與客戶端請求的URI相匹配

  • 功能:允許根據用戶請求的URI來匹配定義的各location,匹配到時,此請求將被相應的location配置塊中的配置所處理,例如做訪問控制等功能
#語法:location [ 修飾符 ] pattern {......}

常用修飾符說明:

修飾符 功能
= 精確匹配
~ 正則表達式模式匹配,區分大小寫
~* 正則表達式模式匹配,不區分大小寫
^~ 首碼匹配,類似於無修飾符的行為,也是以指定模塊開始,不同的是,如果模式匹配,那麼就停止搜索其他模式了,不支持正則表達式
@ 定義命名location區段,這些區段客戶端不能訪問,只可以由內部產生的請求來訪問,如try_files或error_page等

沒有修飾符表示必須以指定模式開始,如:

server {
  server_name www.idfsoft.com;
  location /abc {
    ......
  }
}

那麼如下內容就可正確匹配:

  • http://www.idfsoft.com/abc
  • http://www.idfsoft.com/abc?p1=11&p2=22
  • http://www.idfsoft.com/abc/

=:表示必須與指定的模式精確匹配,如:

server {
  server_name www.idfsoft.com;
  location = /abc {
    ......
  }
}

那麼如下內容就可正確匹配:

  • http://www.idfsoft.com/abc
  • http://www.idfsoft.com/abc?p1=11&p2=22

如下內容則無法匹配:

  • http://www.idfsoft.com/abc/
  • http://www.idfsoft.com/abc/abcde

~:表示指定的正則表達式要區分大小寫,如:

server {
  server_name www.idfsoft.com;
  location ~ ^/abc$ {
  ......
  }
}

那麼如下內容就可正確匹配:

  • http://www.idfsoft.com/abc
  • http://www.idfsoft.com/abc?p1=11&p2=22

如下內容則無法匹配:

  • http://www.idfsoft.com/abc/
  • http://www.idfsoft.com/ABC
  • http://www.idfsoft.com/abcde

**~*:表示指定的正則表達式不區分大小寫,如:**

server {
  server_name www.idfsoft.com;
  location ~* ^/abc$ {
    ......
  }
}

那麼如下內容就可正確匹配:

  • http://www.idfsoft.com/abc
  • http://www.idfsoft.com/abc?p1=11&p2=22
  • http://www.idfsoft.com/ABC

如下內容則無法匹配:

  • http://www.idfsoft.com/abc/
  • http://www.idfsoft.com/abcde

~:類似於無修飾符的行為,也是以指定模式開始,不同的是,如果模式匹配,則停止搜索其他模式

查找順序和優先順序:由高到底依次為

  1. 帶有=的精確匹配優先
  2. 正則表達式按照他們在配置文件中定義的順序
  3. 帶有^~修飾符的,開頭匹配
  4. 帶有~或~*修飾符的,如果正則表達式與URI匹配
  5. 沒有修飾符的精確匹配

訪問控制

用於location段
allow:設定允許哪台或哪些主機訪問,多個參數需要寫多條
deny:設定禁止哪台或哪些主機訪問,多個參數需要寫多條
示例:

allow 192.168.1.1/32;
allow 172.16.0.0/16;
deny all;

6.11 基於用戶認證

auth_basic "歡迎信息";
auth_basic_user_file "/path/to/user_auth_file"

user_auth_file內容格式為:

username:password

這裡的密碼為加密後的密碼串,建議用htpasswd來創建此文件:

htpasswd -c -m /path/to/.user_auth_file USERNAME

https配置

生成私鑰,生成證書簽署請求並獲得證書,然後在nginx.conf中配置如下內容:

server {
  listen       443 ssl;
  server_name  www.idfsoft.com;
  ssl_certificate      /etc/nginx/ssl/nginx.crt;
  ssl_certificate_key  /etc/nginx/ssl/nginx.key;
  ssl_session_cache    shared:SSL:1m;
  ssl_session_timeout  5m;
  ssl_ciphers  HIGH:!aNULL:!MD5;
  ssl_prefer_server_ciphers  on;
  location / {
    root   html;
    index  index.html index.htm;
  }
}

開啟狀態界面

開啟status:

location /status {
  stub_status {on | off};
  allow 172.16.0.0/16;    #
  deny all;
}

訪問狀態頁面的方式:http://server_ip/status

狀態頁面信息詳解:

狀態碼 表示的意義
Active connections 2 當前所有處於打開狀態的連接數
accepts 總共處理了多少個連接
handled 成功創建多少握手
requests 總共處理了多少個請求
Reading nginx讀取到客戶端的Header信息數,表示正處於接收請求狀態的連接數
Writing nginx返回給客戶端的Header信息數,表示請求已經接收完成,且正處於處理請求或發送響應的過程中的連接數
Waiting 開啟keep-alive的情況下,這個值等於active - (reading + writing),意思就是Nginx已處理完正在等候下一次請求指令的駐留連接

rewrite

語法:rewrite regex replacement flag;,如:

rewrite ^/images/(.*\.jpg)$ /imgs/$1 break;

此處的$1用於引用(.*.jpg)匹配到的內容,又如:

rewrite ^/bbs/(.*)$ http://www.idfsoft.com/index.html redirect

如上例所示,replacement可以是某個路徑,也可以是某個URL

常見的flag

flag 作用
last 基本上都用這個flag,表示當前的匹配結束,繼續下一個匹配,最多匹配10個到20個。一旦此rewrite規則重寫完成後,就不再被後面其它的rewrite規則進行處理而是由UserAgent重新對重寫後的URL再一次發起請求,並從頭開始執行類似的過程
break 中止Rewrite,不再繼續匹配。一旦此rewrite規則重寫完成後,由UserAgent對新的URL重新發起請求,且不再會被當前location內的任何rewrite規則所檢查
redirect 測試或應用程式使用,以臨時重定向的HTTP狀態302返回新的URL
permanent 測試或應用程式使用,以永久重定向的HTTP狀態301返回新的URL

rewrite模塊的作用是用來執行URL重定向。這個機制有利於去掉惡意訪問的url,也有利於搜索引擎優化(SEO)

nginx使用的語法源於Perl相容正則表達式(PCRE)庫,基本語法如下:

標識符 意義
^ 必須以^後的實體開頭
$ 必須以$前的實體結尾
. 匹配任意字元
[] 匹配指定字元集內的任意字元
[^] 匹配任何不包括在指定字元集內的任意字元串
豎線符 匹配 豎線符 之前或之後的實體
() 分組,組成一組用於匹配的實體,通常會有 豎線符 來協助

捕獲子表達式,可以捕獲放在()之間的任何文本,比如:

^(hello|sir)$       
#字元串為“hi sir”捕獲的結果:$1=hi$2=sir
#這些被捕獲的數據,在後面就可以當變數一樣使用了

if

語法:if (condition) {...}

應用場景:

  • server段
  • location段

常見的condition

  • 變數名(變數值為空串,或者以“0”開始,則為false,其它的均為true)
  • 以變數為操作數構成的比較表達式(可使用=,!=類似的比較操作符進行測試)
  • 正則表達式的模式匹配操作
    • ~:區分大小寫的模式匹配檢查
    • ~*:不區分大小寫的模式匹配檢查
    • !~和!~*:對上面兩種測試取反
  • 測試指定路徑為文件的可能性(-f,!-f)
  • 測試指定路徑為目錄的可能性(-d,!-d)
  • 測試文件的存在性(-e,!-e)
  • 檢查文件是否有執行許可權(-x,!-x)

防盜鏈案例

location ~* \.(jpg|gif|jpeg|png)$ {
  valid_referers none blocked www.idfsoft.com;
  if ($invalid_referer) {
    rewrite ^/ http://www.idfsoft.com/403.html;
  }
}

反向代理與負載均衡

nginx通常被用作後端伺服器的反向代理,這樣就可以很方便的實現動靜分離以及負載均衡,從而大大提高伺服器的處理能力。

nginx實現動靜分離,其實就是在反向代理的時候,如果是靜態資源,就直接從nginx發佈的路徑去讀取,而不需要從後臺伺服器獲取了。

但是要註意,這種情況下需要保證後端跟前端的程式保持一致,可以使用Rsync做服務端自動同步或者使用NFS、MFS分散式共用存儲。

Http Proxy模塊,功能很多,最常用的是proxy_pass和proxy_cache

如果要使用proxy_cache,需要集成第三方的ngx_cache_purge模塊,用來清除指定的URL緩存。這個集成需要在安裝nginx的時候去做,如:
./configure --add-module=../ngx_cache_purge-1.0 ......

nginx通過upstream模塊來實現簡單的負載均衡,upstream需要定義在http段內

在upstream段內,定義一個伺服器列表,預設的方式是輪詢,如果要確定同一個訪問者發出的請求總是由同一個後端伺服器來處理,可以設置ip_hash,如:

upstream idfsoft.com {
  ip_hash;
  server 127.0.0.1:9080 weight=5; #weight,權重,例如本例中,效果為前五個訪問的IP分配給9080埠,後面五個訪問的IP分配給8080,最後一個訪問的IP分配給1111,然後迴圈進行此過程。
  server 127.0.0.1:8080 weight=5;
  server 127.0.0.1:1111;
}

註意:這個方法本質還是輪詢,而且由於客戶端的ip可能是不斷變化的,比如動態ip,代理,FQ等,因此ip_hash並不能完全保證同一個客戶端總是由同一個伺服器來處理。

定義好upstream後,需要在server段內添加如下內容:

server {
  location / {
    proxy_pass http://idfsoft.com;
  }
}

nginx的安裝與配置

安裝nginx

[root@Hyrule ~]# useradd -r -M -s /sbin/nologin nginx
[root@Hyrule ~]# yum -y install pcre-devel openssl openssl-devel gd-devel gcc gcc-c++
[root@Hyrule ~]# yum -y groups mark install 'Development Tools'
[root@Hyrule ~]# mkdir -p /var/log/nginx
[root@Hyrule ~]# chown -R nginx.nginx /var/log/nginx
[root@Hyrule ~]# cd /usr/src/
[root@Hyrule src]# wget http://nginx.org/download/nginx-1.14.2.tar.gz
[root@Hyrule src]# tar xf nginx-1.14.2.tar.gz 
[root@Hyrule src]# cd nginx-1.14.2
[root@Hyrule nginx-1.14.2]# ./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-debug \
--with-http_ssl_module \
--with-http_realip_module \
--with-http_image_filter_module \
--with-http_gunzip_module \
--with-http_gzip_static_module \
--with-http_stub_status_module \
--http-log-path=/var/log/nginx/access.log \
--error-log-path=/var/log/nginx/error.log
[root@Hyrule nginx-1.14.2]# make -j $(grep 'processor' /proc/cpuinfo | wc -l) && make install
[root@Hyrule ~]# echo 'export PATH=/usr/local/nginx/sbin:$PATH' > /etc/profile.d/nginx.sh
[root@Hyrule ~]# . /etc/profile.d/nginx.sh
[root@Hyrule ~]# nginx
[root@Hyrule ~]# ss -antl
State       Recv-Q Send-Q        Local Address:Port                       Peer Address:Port              
LISTEN      0      128                       *:80                                    *:*                  
LISTEN      0      128                       *:22                                    *:*                  
LISTEN      0      100               127.0.0.1:25                                    *:*                  
LISTEN      0      128                       *:10050                                 *:*                  
LISTEN      0      128                      :::22                                   :::*                  
LISTEN      0      100                     ::1:25                                   :::*                  
LISTEN      0      80                       :::3306                                 :::*         

添加nginx為系統服務

#編寫nginx的啟動腳本
[root@Hyrule ~]# vim nginx_service.sh
#!/bin/bash 
#
# chkconfig: - 85 15 
# description: nginx 
# processname: nginx 

nginx=/usr/local/nginx/sbin/nginx 
conf=/usr/local/nginx/conf/nginx.conf 
case $1 in 
    start)
        $nginx -c 
        $conf 
    ;; 
    stop)
        killall -9 nginx 
    ;;
    restart)
        killall -9 nginx
        $nginx -c
        $conf 
    *)
        echo "Usage: service {start|stop|restart}"
    ;;

[root@Hyrule ~]# chmod +x nginx_service.sh
#將
[root@Hyrule ~]# cp nginx_service.sh /etc/init.d/nginx
[root@Hyrule ~]# chkconfig –add nginx 

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 下載了codesmith 8,連接Mysql卻提示“找不到請求的 .Net Framework Data Provider"。 1,下載MySql.Data.dll:https://dev.mysql.com/downloads/windows/visualstudio/ 下載zip格式的即可,解壓 ...
  • 今天這篇文章我將通過實例代碼帶著大家一步一步通過abp vNext這個asp.net core的快速開發框架來進行Quartz.net定時任務調度的管理界面的開發。大伙最好跟著一起敲一下代碼,當然源碼我會上傳到github上,有興趣的小伙伴可以在文章底部查看源碼鏈接。 作者:依樂祝 原文鏈接:htt ...
  • 在實際業務系統的開發中,往往需要幾個系統協同一起出來同一個資料庫的數據,資料庫可以是同一個資料庫,也可以根據業務拆分的多個資料庫,如我們企業微信的應用、後臺業務管理系統、以及專門為數據提供服務的API服務介面等,這樣可以極大程度上給我們的業務數據提供支撐,並根據不同的特性進行分開管理和維護。 ...
  • 在開發業務管理系統的時候,往往涉及到資產信息及編碼的列印處理,如我們需要對資產信息、條形碼、二維碼一起列印,以便貼在具體資產信息上面,方便微信公眾號、企業微信進行業務處理,那麼編碼的列印就很有必要了,本篇隨筆介紹實際生產環境中的資產編碼列印處理。 ...
  • 一. 原生SQL查詢 接著上篇講。通過 Entity Framework Core 可以在使用關係資料庫時下降到原始 SQL 查詢。 在無法使用 LINQ 表達要執行的查詢時,或因使用 LINQ 查詢而導致低效的 SQL 查詢時非常有用。 原始 SQL 查詢可返回實體類型,或者從 EF Core 2 ...
  • 因為工作需要調用WebService介面,查了下資料,發現添加服務引用可以直接調用websevice 參考地址:https://www.cnblogs.com/peterpc/p/4628441.html 如果不添加服務引用又怎麼做呢?於是又去查看怎麼根據http協議調用webservice並做了個 ...
  • Insql 國人開發,是一款汲取 Mybatis 優點的.NET ORM 框架。追求簡單直觀,使用自由靈活等特點。 項目主頁: "https://rainrcn.github.io/insql" 此 ORM 是以 Mybatis 的 Sql 配置方式,以 Dapper 為對象映射的基礎上建立。喜歡寫 ...
  • Peach是基於[DotNetty][1]的Socket網路通訊幫助類庫,可以幫助開發者簡化使用DotNetty,關於DotNetty可參考我之前的[這篇文章][2]。 Peach內置實現了一個基於文本協議的CommandLineProtocol,下麵的實例以這個協議展開,最後以[DotBPE][... ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...