nginx編譯安裝以及常用參數詳解

来源:https://www.cnblogs.com/yan-linux/archive/2023/01/11/17043491.html
-Advertisement-
Play Games

1 基於ansible role實現編譯安裝nginx 利用ansible控制端10.0.0.8機器,在被控制端10.0.0.18上部署nginx ==首先打通ansible控制端與被控制端的基於key驗證== [root@ansible-rocky ~]$ ssh-copy-id 10.0.0.1 ...


1 基於ansible role實現編譯安裝nginx

利用ansible控制端10.0.0.8機器,在被控制端10.0.0.18上部署nginx

首先打通ansible控制端與被控制端的基於key驗證

[root@ansible-rocky ~]$ ssh-copy-id 10.0.0.18
[root@ansible-rocky ~]$ ssh 10.0.0.18
Last login: Wed Jan 11 12:18:28 2023 from 10.0.0.8
[root@rocky8 ~]$ hostname -I
10.0.0.18

然後創建nginx項目目錄實現基於role的部署任務

#nginx role項目目錄總覽
[root@ansible-rocky opt]$ tree /opt
/opt
├── hosts_nginx
├── nginx_role.yml
└── roles
    └── nginx
        ├── handlers
        │   └── main.yml
        ├── tasks
        │   └── main.yml
        └── templates
            ├── nginx.conf.j2
            └── nginx.service.j2

#task文件
[root@ansible-rocky roles]$ cat nginx/tasks/main.yml 
- name: add group nginx
  group: name=nginx system=yes gid=80

- name: add user nginx
  user: name=nginx group=nginx uid=80 system=yes shell="/sbin/nologin" create_home=no

- name: install dependent package
  yum: name={{item}} state=latest
  loop:
    - gcc
    - make
    - pcre-devel
    - openssl-devel
    - zlib-devel
    - perl-ExtUtils-Embed

- name: get nginx source
  unarchive:
    src: "{{ url }}"
    dest: "/usr/local/src"
    remote_src: yes

- name: compile and install
  shell:
    cmd: "./configure --prefix={{install_dir}} --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_stub_status_module --with-http_gzip_static_module --with-pcre --with-stream --with-stream_ssl_module --with-stream_realip_module && make && make install"
    chdir: "/usr/local/src/nginx-{{ version }}"
    creates: "{{install_dir}}/sbin/nginx"

- name: config file
  template:
    src: nginx.conf.j2
    dest: "{{install_dir}}/conf/nginx.conf"
    owner: nginx
    group: nginx
  notify: restart service
  tags:
    - config

- name: create directory
  file:
    path: "{{install_dir}}/conf/conf.d"
    state: directory
    owner: nginx
    group: nginx

- name: change install directory owner
  file:
    path: "{{install_dir}}"
    owner: nginx
    group: nginx
    recurse: yes

- name: copy service file
  template:
    src: nginx.service.j2
    dest: "/lib/systemd/system/nginx.service"

- name: check config
  shell:
    cmd: "{{install_dir}}/sbin/nginx -t"
  register: check_nginx_config
  changed_when:
    - check_nginx_config.stdout.find('successful')
    - false

- name: start service
  systemd:
    daemon_reload: yes
    name: nginx.service
    state: started
    enabled: yes
      
#創建handler文件
[root@ansible-rocky roles]$ cat nginx/handlers/main.yml 
- name: restart service
  service:
    name: nginx
    state: restarted

#裝備兩個template文件
[root@ansible-rocky roles]$ cat nginx/templates/nginx.conf.j2 
user nginx;
worker_processes  {{ ansible_processor_vcpus*2 }};
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    log_format  access_json '{"@timestamp":"$time_iso8601",'
        '"host":"$server_addr",'
        '"clientip":"$remote_addr",'
        '"size":$body_bytes_sent,'
        '"responsetime":$request_time,'
        '"upstreamtime":"$upstream_response_time",'
        '"upstreamhost":"$upstream_addr",'
        '"http_host":"$host",'
        '"uri":"$uri",'
        '"xff":"$http_x_forwarded_for",'
        '"referer":"$http_referer",'
        '"tcp_xff":"$proxy_protocol_addr",'
        '"http_user_agent":"$http_user_agent",'
        '"status":"$status"}';
    # logging                                                                                          
    access_log {{install_dir}}/logs/access-json.log access_json;
    error_log {{install_dir}}/logs/error.log warn;

    keepalive_timeout  65;
    include {{install_dir}}/conf/conf.d/*.conf;
}
[root@ansible-rocky roles]$ cat nginx/templates/nginx.service.j2 
[Unit]
Description=The nginx HTTP and reverse proxy server
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
PIDFile={{install_dir}}/logs/nginx.pid
ExecStartPre=/bin/rm -f {{install_dir}}/logs/nginx.pid
ExecStartPre={{install_dir}}/sbin/nginx -t
ExecStart={{install_dir}}/sbin/nginx
ExecReload=/bin/kill -s HUP \$MAINPID
KillSignal=SIGQUIT
TimeoutStopSec=5
KillMode=process
PrivateTmp=true                                                                                        
LimitNOFILE=100000

[Install]
WantedBy=multi-user.target

#在hosts文件中定義wensrvs需要的變數
[root@ansible-rocky opt]$ cat hosts_nginx 
[websrvs]
10.0.0.18

[websrvs:vars]
version="1.22.1"
url="http://nginx.org/download/nginx-{{ version }}.tar.gz"
install_dir="/apps/nginx"


#在playbook中調用角色
[root@ansible-rocky opt]$ cat nginx_role.yml 
- hosts: websrvs
  remote_user: root

  roles:
    - nginx
    
#運行playbook
[root@ansible-rocky opt]$ ansible-playbook -i hosts_nginx nginx_role.yml 

PLAY [websrvs] ****************************************************************************************

TASK [Gathering Facts] ********************************************************************************
ok: [10.0.0.18]

TASK [nginx : add group nginx] ************************************************************************
changed: [10.0.0.18]

TASK [nginx : add user nginx] *************************************************************************
changed: [10.0.0.18]

TASK [nginx : install dependent package] **************************************************************
changed: [10.0.0.18] => (item=gcc)
ok: [10.0.0.18] => (item=make)
changed: [10.0.0.18] => (item=pcre-devel)
changed: [10.0.0.18] => (item=openssl-devel)
ok: [10.0.0.18] => (item=zlib-devel)
changed: [10.0.0.18] => (item=perl-ExtUtils-Embed)

TASK [nginx : get nginx source] ***********************************************************************
changed: [10.0.0.18]

TASK [nginx : compile and install] ********************************************************************
changed: [10.0.0.18]

TASK [nginx : config file] ****************************************************************************
changed: [10.0.0.18]

TASK [nginx : create directory] ***********************************************************************
changed: [10.0.0.18]

TASK [nginx : change install directory owner] *********************************************************
changed: [10.0.0.18]

TASK [nginx : copy service file] **********************************************************************
changed: [10.0.0.18]

TASK [nginx : check config] ***************************************************************************
ok: [10.0.0.18]

TASK [nginx : start service] **************************************************************************
changed: [10.0.0.18]

RUNNING HANDLER [nginx : restart service] *************************************************************
changed: [10.0.0.18]

PLAY RECAP ********************************************************************************************
10.0.0.18                  : ok=13   changed=11   unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

在被控制端檢查是否安裝完成

2 編譯安裝參數詳解

編譯安裝參數示例

./configure --prefix={{install_dir}} \ 
--user=nginx \
--group=nginx \
--with-http_ssl_module \
--with-http_v2_module \
--with-http_realip_module \
--with-http_stub_status_module \
--with-http_gzip_static_module \
--with-pcre \
--with-stream \
--with-stream_ssl_module \
--with-stream_realip_module

在編譯安裝參數中--with開頭的選項預設是禁用的,想要使用的話就需要在編譯的時候加上;without開頭的選項預設是開啟的,不想要啟用此模塊的話就需要在編譯的時候加上。

通用配置選項參數

選項 解釋說明
--prefix=<path> Nginx安裝的根路徑,所有其它路徑都要依賴該選項
--sbin-path=<path> 指定nginx二進位文件的路徑,沒指定的話 這個路徑依賴<prefix>選項
--conf-path=<path> 命令行未指定配置文件,將會通過這裡指定的路徑載入配置文件
--error-log-path=<path> 寫入錯誤日誌文件地址,預設值:<prefix>/logs/error.log。安裝後,可以使用 nginx.conf 中的 error_log 指令更改。
--pid-path=<path> nginx master進程pid寫入的文件位置,預設值:<prefix>/logs/nginx.pid。安裝後,可以使用 nginx.conf 中的 pid 指令更改。
--lock-path=<path> 共用存儲器互斥鎖文件路徑
--user=<user> nginx 運行用戶。預設值:nobody。安裝後,可以使用 nginx.conf 中的 user 指令更改。
--group=<group> nginx 運行組。預設值:--user 指定的值。安裝後,可以使用 nginx.conf 中的 user 指令更改。

預設開啟的模塊

選項 解釋說明
--without-http_gzip_module 禁用 ngx_http_gzip_module 模塊
--without-http_userid_module 禁用 ngx_http_userid_module 模塊,該模塊設置適用於客戶端標識的 cookie
--without-http_access_module 禁用 ngx_http_access_module 模塊,該模塊允許限制對某些客戶端地址的訪問
--without-http_rewrite_module 禁用 URL 轉發(rewrite)
--without-http_proxy_module 禁用 HTTP 伺服器代理(proxy)模塊
--without-http-cache 禁用 HTTP 緩存

預設未開啟模塊

選項 解釋說明
--with-http_ssl_module 啟用 HTTPS 協議支持,需要 OpenSSL 庫。預設情況下未構建此模塊
--with-http_v2_module 啟用 HTTP/2 協議支持。預設情況下未構建此模塊。
--with-http_realip_module 啟用 ngx_http_realip_module 模塊的功能,該模塊將客戶端地址更改為在指定的 "header " 欄位中發送的地址。預設情況下未構建此模塊
--with-http_sub_module 啟用 ngx_http_sub_module 模塊,該模塊通過將一個指定的字元串替換為另一個指定的字元串來修改響應。預設情況下未構建此模塊
--with-http_gzip_static_module 啟用 ngx_http_gzip_static_module 模塊,該模塊支持發送擴展名為 “.gz” 的預壓縮文件,而不是常規文件。預設情況下未構建此模塊
--with-http_auth_request_module 啟用 ngx_http_auth_request_module 模塊,該模塊基於子請求的結果實現客戶端授權。預設情況下未構建此模塊
--with-http_stub_status_module 啟用 ngx_http_stub_status_module 模塊,該模塊提供對基本狀態信息的訪問。預設情況下未構建此模塊
--add-module=path 啟用外部模塊
--add-dynamic-module=path 啟用外部動態模塊
--modules-path=path nginx 動態模塊的目錄。預設值:<prefix>/modules目錄

perl模塊相關選項參數

選項 解釋說明
--without-pcre 禁用PCRE庫
--with-pcre 強制使用PCRE庫

郵件模塊相關配置選項參數

選項 解釋說明
--with-mail 激活POP3/IMAP4/SMTP代理模塊,預設未激活
--with-mail_ssl_module 允許ngx_mail_ssl_module模塊這個模塊使得POP3/IMAP/SMTP可以使用SSL/TLS.配置已經定義了HTTP SSL模塊,但是不支持客戶端證書檢測
--without-mail_pop3_module 啟用mail模塊後,單獨禁用pop3模塊
--without-mail_imap_module 啟用mail模塊後,單獨禁用imap模塊
--without-mail_smtp_module 啟用mail模塊後,單獨禁用smtp模塊
--without-http 完全禁用http模塊,如果只想支持mall,可以使用此項設置
--with-openssl=DIR 設定OpenSSL庫文件路徑

stream模塊相關參數

選項 解釋說明
--with-stream 開啟stream模塊
--with-stream_ssl_module 啟用 stream 模塊的 SSL/TLS 協議支持。構建和運行此模塊需要 OpenSSL 庫。預設情況下未構建此模塊
--with-stream_realip_module 啟用 ngx_stream_realip_module 模塊的功能,該模塊將客戶端地址更改為 PROXY 協議標頭中發送的地址。預設情況下未構建此模塊
--without-stream_access_module 禁用 ngx_stream_access_module 模塊,該模塊允許限制對某些客戶端地址的訪問

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

-Advertisement-
Play Games
更多相關文章
  • 相較於最初的 Bourne shell,現代 bash 版本的最大改進之一體現在算術方面。早期的 shell 版本沒有內建的算術功能,哪怕是給變數加1,也得調用單獨的程式來完成。 1、算術方法一: $(( )) 只要都是整數運算,就可以在 $(( )) 的算術表達式內使用所有的標準運算符。還有一個額 ...
  • 大家好,我是三友~~ 這篇文章我準備來聊一聊RocketMQ消息的一生。 不知你是否跟我一樣,在使用RocketMQ的時候也有很多的疑惑: 消息是如何發送的,隊列是如何選擇的?消息是如何存儲的,是如何保證讀寫的高性能?RocketMQ是如何實現消息的快速查找的?RocketMQ是如何實現高可用的?消 ...
  • 原文:JavaFx 頁面和控制項設置快捷鍵 - Stars-One的雜貨小窩 之前說過一篇window系統全局快捷鍵的設置,本期主要是講解JavaFx應用程式的快捷鍵設置,還是有所區別的 這裡主要是Tornadofx為例進行講解,以Kotlin語言為例,由於比較簡單,就不貼截圖了,下麵例子都是自己測試 ...
  • 2023-01-10 一、Mybatis中獲取主鍵自增數據 要獲取自增數據時,需要在映射文件中的“<insert>”中添加兩個屬性,例如獲取自增的id ①EmployeeMapper.xml中的<mapper>標簽內部 <insert id="insertEmployee" useGenerated ...
  • 在高併發下,Java程式的GC問題屬於很典型的一類問題,帶來的影響往往會被進一步放大。不管是「GC頻率過快」還是「GC耗時太長」,由於GC期間都存在Stop The World問題,因此很容易導致服務超時,引發性能問題。 ...
  • 作者:明明如月學長 鏈接:https://juejin.cn/post/7117046503616544804 一、背景 在日常開發中,通常為了方便調試、方便查問題,會列印很多 INFO 級別的日誌。 隨著訪問量越來越大,一不小心,某個日誌文件一天的 size 就大於了某個閾值(如 5G),於是,收 ...
  • 為什麼選擇 gRPC 歷史 長久以來,我們在前後端交互時使用WebApi + JSON方式,後端服務之間調用同樣如此(或者更久遠之前的WCF + XML方式)。WebApi + JSON 是優選的,很重要的一點是它們兩者都是平臺無關的三方標準,且足夠語義化,便於程式員使用,在異構(前後端、多語言後端 ...
  • 在當前唯一的master節點上運行如下命令 第一步: kubeadm init phase upload-certs --upload-certs 執行結果如下: 1 # kubeadm init phase upload-certs --upload-certs 2 I1109 14:34:00. ...
一周排行
    -Advertisement-
    Play Games
  • 概述:在C#中,++i和i++都是自增運算符,其中++i先增加值再返回,而i++先返回值再增加。應用場景根據需求選擇,首碼適合先增後用,尾碼適合先用後增。詳細示例提供清晰的代碼演示這兩者的操作時機和實際應用。 在C#中,++i 和 i++ 都是自增運算符,但它們在操作上有細微的差異,主要體現在操作的 ...
  • 上次發佈了:Taurus.MVC 性能壓力測試(ap 壓測 和 linux 下wrk 壓測):.NET Core 版本,今天計劃準備壓測一下 .NET 版本,來測試並記錄一下 Taurus.MVC 框架在 .NET 版本的性能,以便後續持續優化改進。 為了方便對比,本文章的電腦環境和測試思路,儘量和... ...
  • .NET WebAPI作為一種構建RESTful服務的強大工具,為開發者提供了便捷的方式來定義、處理HTTP請求並返迴響應。在設計API介面時,正確地接收和解析客戶端發送的數據至關重要。.NET WebAPI提供了一系列特性,如[FromRoute]、[FromQuery]和[FromBody],用 ...
  • 原因:我之所以想做這個項目,是因為在之前查找關於C#/WPF相關資料時,我發現講解圖像濾鏡的資源非常稀缺。此外,我註意到許多現有的開源庫主要基於CPU進行圖像渲染。這種方式在處理大量圖像時,會導致CPU的渲染負擔過重。因此,我將在下文中介紹如何通過GPU渲染來有效實現圖像的各種濾鏡效果。 生成的效果 ...
  • 引言 上一章我們介紹了在xUnit單元測試中用xUnit.DependencyInject來使用依賴註入,上一章我們的Sample.Repository倉儲層有一個批量註入的介面沒有做單元測試,今天用這個示例來演示一下如何用Bogus創建模擬數據 ,和 EFCore 的種子數據生成 Bogus 的優 ...
  • 一、前言 在自己的項目中,涉及到實時心率曲線的繪製,項目上的曲線繪製,一般很難找到能直接用的第三方庫,而且有些還是定製化的功能,所以還是自己繪製比較方便。很多人一聽到自己畫就害怕,感覺很難,今天就分享一個完整的實時心率數據繪製心率曲線圖的例子;之前的博客也分享給DrawingVisual繪製曲線的方 ...
  • 如果你在自定義的 Main 方法中直接使用 App 類並啟動應用程式,但發現 App.xaml 中定義的資源沒有被正確載入,那麼問題可能在於如何正確配置 App.xaml 與你的 App 類的交互。 確保 App.xaml 文件中的 x:Class 屬性正確指向你的 App 類。這樣,當你創建 Ap ...
  • 一:背景 1. 講故事 上個月有個朋友在微信上找到我,說他們的軟體在客戶那邊隔幾天就要崩潰一次,一直都沒有找到原因,讓我幫忙看下怎麼回事,確實工控類的軟體環境複雜難搞,朋友手上有一個崩潰的dump,剛好丟給我來分析一下。 二:WinDbg分析 1. 程式為什麼會崩潰 windbg 有一個厲害之處在於 ...
  • 前言 .NET生態中有許多依賴註入容器。在大多數情況下,微軟提供的內置容器在易用性和性能方面都非常優秀。外加ASP.NET Core預設使用內置容器,使用很方便。 但是筆者在使用中一直有一個頭疼的問題:服務工廠無法提供請求的服務類型相關的信息。這在一般情況下並沒有影響,但是內置容器支持註冊開放泛型服 ...
  • 一、前言 在項目開發過程中,DataGrid是經常使用到的一個數據展示控制項,而通常表格的最後一列是作為操作列存在,比如會有編輯、刪除等功能按鈕。但WPF的原始DataGrid中,預設只支持固定左側列,這跟大家習慣性操作列放最後不符,今天就來介紹一種簡單的方式實現固定右側列。(這裡的實現方式參考的大佬 ...