Nginxpermanent及其用法詳解

一、Nginxpermanent介紹

Nginxpermanent是Nginx的一個模塊,可以將Nginx的配置文件永久保存在內存中,而不是臨時保存在磁碟上。其優點在於減少了磁碟I/O操作,提高了Nginx的穩定性和性能。另外,Nginxpermanent還支持對配置文件進行熱載入,即在不重啟Nginx的情況下重新載入配置文件。

使用方法1:在Nginx配置文件中添加如下指令。

    http {
        ...
    
        perl_modules           perl/lib;
    
        init_by_lua_block {
            -- 導入需要的庫
            local nginx_permanent = require('nginx.permanent')
            -- 永久化配置文件
            nginx_permanent.persist()
        }
    
        ...
    }

使用方法2:通過nginx-persist命令行工具對Nginx配置文件進行永久化。

Step1:安裝nginx-persist。

    $ sudo apt-get install nginx-persist

Step2:對要永久化的Nginx配置文件進行自動化修改。

    $ sudo nginx-persist /etc/nginx/sites-enabled/my-example-site.com

注意:Nginx配置文件的自動化修改將刪除注釋行、轉換為Unix格式、移除多餘空白符和空行等。

二、Nginxpermanent使用例子

1、案例一:增加HTTPS支持

Step1:安裝證書和密鑰。

    $ sudo mkdir /etc/nginx/certs
    
    $ sudo cp my-example-site.com.crt /etc/nginx/certs/my-example-site.com.crt
    $ sudo cp my-example-site.com.key /etc/nginx/certs/my-example-site.com.key

Step2:修改Nginx配置文件。

    http {
        ...
        
        init_by_lua_block {
            local nginx_permanent = require('nginx.permanent')
            local cert_path = "/etc/nginx/certs/my-example-site.com.crt"
            local key_path = "/etc/nginx/certs/my-example-site.com.key"
            local server_name = "my-example-site.com"
            local server_port = 443
            -- 從配置文件中獲取listen和server_name指令的值
            local listen = ngx.shared.config:get("http.listen")
            local server_name = ngx.shared.config:get("server.server_name")
            -- 重寫listen和server_name
            ngx.shared.config:set("http.listen", "listen " .. server_port .. " ssl;")
            ngx.shared.config:set("server.server_name", "server_name " .. server_name .. ";")
            -- 將增加HTTPS支持的代碼添加到nginx.conf文件的最後一行
            local content =  [[
                ssl_certificate     ]] .. cert_path .. [[;
                ssl_certificate_key ]] .. key_path .. [[;
            ]]
            nginx_permanent.append_to_last(content)
            -- 永久化配置文件
            nginx_permanent.persist()
            -- 重啟Nginx
            ngx.timer.at(0, function(premature)
                os.execute("/etc/init.d/nginx restart")
            end)
        }
        
        ...
    }

2、案例二:增加Basic Auth認證

Step1:創建.htpasswd文件。

    $ sudo htpasswd -c /etc/nginx/.htpasswd username

Step2:修改Nginx配置文件。

    server {
        ...
    
        init_by_lua_block {
            local nginx_permanent = require('nginx.permanent')
            local realm = "Restricted Area"
            local username = "username"
            local password = "password"
            local server_port = 80
            -- 從配置文件中獲取listen指令的值
            local listen = ngx.shared.config:get("http.listen")
            -- 重寫listen
            ngx.shared.config:set("http.listen", "listen " .. server_port .. ";")
            -- 將增加Basic Auth認證的代碼添加到nginx.conf文件的最後一行
            local content =  [[
                auth_basic           "]] .. realm .. [[";
                auth_basic_user_file /etc/nginx/.htpasswd;
                
                location / {
                    proxy_pass http://backend;
                    proxy_set_header Host      $host;
                    proxy_set_header X-Real-IP $remote_addr;
                }
            ]]
            nginx_permanent.append_to_last(content)
            -- 永久化配置文件
            nginx_permanent.persist()
            -- 重啟Nginx
            ngx.timer.at(0, function(premature)
                os.execute("/etc/init.d/nginx restart")
            end)
        }
        
        location / {
            proxy_pass http://backend;
            proxy_set_header Host      $host;
            proxy_set_header X-Real-IP $remote_addr;
        }
    }

三、Nginxpermanent常用方法

1、persist

作用:將Nginx配置文件永久化。

使用方法:

    local nginx_permanent = require('nginx.permanent')
    
    -- 永久化配置文件
    nginx_permanent.persist()

2、append_to_last

作用:將文本內容添加到nginx.conf文件的最後一行。

使用方法:

    local nginx_permanent = require('nginx.permanent')
    
    local content = [[
        auth_basic           "Restricted Area";
        auth_basic_user_file /etc/nginx/.htpasswd;
    ]]
    
    nginx_permanent.append_to_last(content)
    
    -- 永久化配置文件
    nginx_permanent.persist()

3、replace

作用:將nginx.conf文件中第一次出現的目標字元串替換為新的文本內容。

使用方法:

    local nginx_permanent = require('nginx.permanent')
    
    local old_str = "server_name example.com;"
    local new_str = "server_name newexample.com;"
    
    nginx_permanent.replace(old_str, new_str)
    
    -- 永久化配置文件
    nginx_permanent.persist()

4、delete

作用:將nginx.conf文件中第一次出現的目標字元串刪除。

使用方法:

    local nginx_permanent = require('nginx.permanent')
    
    local str = "server_name example.com;"
    
    nginx_permanent.delete(str)
    
    -- 永久化配置文件
    nginx_permanent.persist()

5、append

作用:將文本內容添加到nginx.conf文件的指定行數後面。

使用方法:

    local nginx_permanent = require('nginx.permanent')
    
    local line_num = 10
    local content = [[
        server {
            ...
        }
    ]]
    
    nginx_permanent.append(line_num, content)
    
    -- 永久化配置文件
    nginx_permanent.persist()

結束語

本文詳細介紹了Nginxpermanent模塊的用法及其常用方法,並提供了兩個案例作為參考。通過對Nginx配置文件的永久化,可以提高Nginx的穩定性和性能,在生產環境中具有重要的實際意義。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/242910.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-12 12:53
下一篇 2024-12-12 12:53

相關推薦

  • Linux sync詳解

    一、sync概述 sync是Linux中一個非常重要的命令,它可以將文件系統緩存中的內容,強制寫入磁碟中。在執行sync之前,所有的文件系統更新將不會立即寫入磁碟,而是先緩存在內存…

    編程 2025-04-25
  • 神經網路代碼詳解

    神經網路作為一種人工智慧技術,被廣泛應用於語音識別、圖像識別、自然語言處理等領域。而神經網路的模型編寫,離不開代碼。本文將從多個方面詳細闡述神經網路模型編寫的代碼技術。 一、神經網…

    編程 2025-04-25
  • C語言貪吃蛇詳解

    一、數據結構和演算法 C語言貪吃蛇主要運用了以下數據結構和演算法: 1. 鏈表 typedef struct body { int x; int y; struct body *nex…

    編程 2025-04-25
  • Python輸入輸出詳解

    一、文件讀寫 Python中文件的讀寫操作是必不可少的基本技能之一。讀寫文件分別使用open()函數中的’r’和’w’參數,讀取文件…

    編程 2025-04-25
  • Python安裝OS庫詳解

    一、OS簡介 OS庫是Python標準庫的一部分,它提供了跨平台的操作系統功能,使得Python可以進行文件操作、進程管理、環境變數讀取等系統級操作。 OS庫中包含了大量的文件和目…

    編程 2025-04-25
  • git config user.name的詳解

    一、為什麼要使用git config user.name? git是一個非常流行的分散式版本控制系統,很多程序員都會用到它。在使用git commit提交代碼時,需要記錄commi…

    編程 2025-04-25
  • 詳解eclipse設置

    一、安裝與基礎設置 1、下載eclipse並進行安裝。 2、打開eclipse,選擇對應的工作空間路徑。 File -> Switch Workspace -> [選擇…

    編程 2025-04-25
  • Java BigDecimal 精度詳解

    一、基礎概念 Java BigDecimal 是一個用於高精度計算的類。普通的 double 或 float 類型只能精確表示有限的數字,而對於需要高精度計算的場景,BigDeci…

    編程 2025-04-25
  • MPU6050工作原理詳解

    一、什麼是MPU6050 MPU6050是一種六軸慣性感測器,能夠同時測量加速度和角速度。它由三個感測器組成:一個三軸加速度計和一個三軸陀螺儀。這個組合提供了非常精細的姿態解算,其…

    編程 2025-04-25
  • nginx與apache應用開發詳解

    一、概述 nginx和apache都是常見的web伺服器。nginx是一個高性能的反向代理web伺服器,將負載均衡和緩存集成在了一起,可以動靜分離。apache是一個可擴展的web…

    編程 2025-04-25

發表回復

登錄後才能評論