1. 程式人生 > >Linux中編譯、安裝nginx

Linux中編譯、安裝nginx

Nginx ("engine x") 是一個高效能的HTTP和反向代理伺服器,也是一個IMAP/POP3/SMTP 代理伺服器。 Nginx 是由Igor Sysoev為俄羅斯訪問量第二的Rambler.ru站點開發的,第一個公開版本0.1.0釋出於2004年10月4日。其將原始碼以類BSD許可證的形式釋出,因它的穩定性、豐富的功能集、示例配置檔案和低系統資源的消耗而聞名。

作為開源的伺服器軟體,在Linux系統中安裝和其他開源軟體的安裝方法大同小異,無非就是編譯,然後安裝。下面介紹我編譯安裝nginx的過程:

工作機器各項引數如下:

CPU:Intel Xeon 5110

記憶體:DDR2 1G*4

主機型號:ProLiant DL140 G3

作業系統:Red Hat Enterprise Linux Server release 5.4 x86_64版

核心版本:2.6.18

gcc版本:4.1.2

g++版本:4.1.2

1.下載nginx原始碼:

截止到今天(2011年11月24日),最新的穩定版的nginx伺服器版本號為1.0.10,可以從nginx的官方網站http://www.nginx.org/中下載到其原始碼。 

這裡強烈建議下載tar.gz格式的壓縮包。在Linux下,檔案訪問有著嚴格的許可權限制。一個檔案是否允許以二進位制或者指令碼的形式執行,完全取決於其是否擁有執行缺陷,這與Windows識別檔案字尾名(.exe、.bat)的方式不同。zip格式的壓縮包中是不保留檔案的許可權資訊的,而tar.gz格式的壓縮包是儲存有檔案的許可權資訊的。

下載nginx的tar.gz格式原始碼包

然後對其解壓,並執行編譯配置指令碼:

[[email protected] Downloads]# tar -xf nginx-1.0.10.tar.gz 
[[email protected] Downloads]# cd nginx-1.0.10
[[email protected] nginx-1.0.10]# ./configure 

指令碼執行到最後可能會報出如下錯誤:

checking for PCRE library ... not found
checking for PCRE library in /usr/local/ ... not found
checking for PCRE library in /usr/include/pcre/ ... not found
checking for PCRE library in /usr/pkg/ ... not found
checking for PCRE library in /opt/local/ ... not found

./configure: error: the HTTP rewrite module requires the PCRE library.
You can either disable the module by using --without-http_rewrite_module
option, or install the PCRE library into the system, or build the PCRE library
statically from the source with nginx by using --with-pcre=<path> option.

[
[email protected]
nginx-1.0.10]#

這說明系統中缺少PCRE庫。該庫是實現正則表示式的基礎,如果缺少此庫,nginx無法支援HTTP中的URL重寫功能。如果你不需要此功能,可以在執行編譯配置指令碼時加入“--without-http_rewrite_module”。但是,這裡我們需要這項功能。於是下載PCRE庫。

2.下載安裝PCRE庫:

PCRE庫是實現Perl式正則表示式的基礎。如果系統中缺少此庫需要編譯安裝。可以從著名的開源軟體網站sourceforge上下載:http://sourceforge.net/projects/pcre/files/pcre/。目前最新版本是8.20。

仍然是下載後解壓、配置、編譯和安裝:

[[email protected] Downloads]# tar -xf pcre-8.20.tar.gz 
[[email protected] Downloads]# cd pcre-8.20
[[email protected] pcre-8.20]# ./configure
[[email protected] pcre-8.20]# make
[[email protected] pcre-8.20]# sudo make install

3.編譯nginx:

如果編譯配置指令碼正常執行,會在最後報告出nginx將要安裝的位置以及其他相關資訊。閱讀過之後直接編譯就好:

  nginx path prefix: "/usr/local/nginx"
  nginx binary file: "/usr/local/nginx/sbin/nginx"
  nginx configuration prefix: "/usr/local/nginx/conf"
  nginx configuration file: "/usr/local/nginx/conf/nginx.conf"
  nginx pid file: "/usr/local/nginx/logs/nginx.pid"
  nginx error log file: "/usr/local/nginx/logs/error.log"
  nginx http access log file: "/usr/local/nginx/logs/access.log"
  nginx http client request body temporary files: "client_body_temp"
  nginx http proxy temporary files: "proxy_temp"
  nginx http fastcgi temporary files: "fastcgi_temp"
  nginx http uwsgi temporary files: "uwsgi_temp"
  nginx http scgi temporary files: "scgi_temp"
[[email protected] nginx-1.0.10]# make

然後進行安裝:

[[email protected] nginx-1.0.10]# sudo make install

安裝到的預設位置是/usr/local/nginx

安裝完畢之後一般需要對其進行優化配置。在很多時候一臺nginx可以承載很多業務,它扮演的是各個子業務系統的入口,通過主機頭來區分不同的業務應用。只有一個nginx.conf配置檔案就會給今後的運維工作帶來很大的麻煩,為此我們將nginx的配置進行了重新的梳理

首先我們把預設的server配置全部刪除。只保留基本的http配置。預設的訪問日誌內容不夠全面,於是我們對它進行修改,記錄更多的欄位。

log_format  main  '$time_iso8601'
                        '       $request_uri'
                        '       $status'
                        '       $bytes_sent'
                        '       $upstream_cache_status'
                        '       $request_time'
                        '       $upstream_response_time'
                        '       $host'
                        '       $remote_addr'
                        '       $server_addr'
                        '       $upstream_addr'
                        '       $http_referer'
                        '       $http_user_agent'
                        '       $http_x_forwarded_for'
                        '       web'
                        '       -'                                              #$cachezone
                        '       $sent_http_cache_control'
                        '       $http_nagios'
                        '       $upstream_status'
                        '       -'                                              #$cache_process_time

雖然最終要啟用gzip壓縮,但由於細化配置較多,我們保持nginx.conf中的#gzip on被註釋掉的狀態,增加如下配置
#gzip  on;
include  gzip.conf;
include  proxy.conf;
include  vhost/*.conf;
關於gzip.conf的配置詳情:
#找不到預壓縮檔案,進行動態壓縮
gzip on;
gzip_min_length   1k;  #設定最小的壓縮值,單位為bytes.超過設定的min_length的值會進行壓縮,小於的不壓縮.
gzip_comp_level   3;   #壓縮等級設定,1-9,1是最小壓縮,速度也是最快的;9剛好相反,最大的壓縮,速度是最慢的,消耗的CPU資源也多
gzip_buffers      16 64k;   #設定系統的快取大小,以儲存GZIP壓縮結果的資料流,它可以避免nginx頻煩向系統申請壓縮空間大小
gzip_types text/plain application/x-javascript text/css text/javascript;

#關於gzip_types,如果你想讓圖片也開啟gzip壓縮,那麼用以下這段吧:
#gzip_types text/plain application/x-javascript text/css text/javascript application/x-httpd-php image/jpeg image/gif image/png;

#gzip公共配置
gzip_http_version 1.1;      #識別http的協議版本(1.0/1.1)
gzip_proxied      any;      #設定使用代理時是否進行壓縮,預設是off的
gzip_vary         on;       #和http頭有關係,加個vary頭,代理判斷是否需要壓縮
gzip_disable "MSIE [1-6]."; #禁用IE6的gzip壓縮

關於proxy.conf的配置詳情:
#注:proxy_temp_path和proxy_cache_path指定的路徑必須在同一分割槽
proxy_temp_path   /tmp/proxy_temp;

#設定Web快取區名稱為cache_one,記憶體快取空間大小為500MB,1天沒有被訪問的內容自動清除,硬碟快取空間大小為30GB。
proxy_cache_path  /tmp/proxy_cache levels=1:2 keys_zone=cache_one:500m inactive=1d max_size=30g;

client_body_buffer_size  10m;     #原為512k
proxy_connect_timeout    10;       #代理連線超時
proxy_read_timeout       30;      #代理髮送超時
proxy_send_timeout       30;      #代理接收超時
proxy_buffer_size        128k;     #代理緩衝大小,原為32k
proxy_buffers           16 256k;   #代理緩衝,原為4 64k
proxy_busy_buffers_size 512k;      #高負荷下緩衝大小,原為128k
proxy_temp_file_write_size 1024m;  #proxy快取臨時檔案的大小原為128k
#proxy_ignore_client_abort  on;    #不允許代理端主動關閉連線
proxy_next_upstream error timeout invalid_header http_500 http_503 http_404 http_502 http_504;

接下來就是針對具體應用進行配置了,首先建立虛擬主機配置專用的目錄
[[email protected] pcre-8.20 conf]# mkdir vhost
[[email protected] pcre-8.20 conf]# cd vhost/

針對每一個主機,分成兩個配置檔案:XXX_server.conf和upstream_XXX.conf。前者用來配置主機名、轉發規則,後者用來配置提供服務的後端伺服器。

例如:admin_web_system_server.conf

server {
	listen 80;

	server_name admin.business.com;
	client_max_body_size 35m;

	location ^~ / {
		access_log  /data/log/nginx/logs/admin_web_system/access.log main;
		proxy_next_upstream http_502 http_504 error timeout invalid_header;
		proxy_set_header Host $host;
		proxy_set_header X-Real-IP $remote_addr;
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		proxy_pass http://admin_web_system;
		proxy_pass_header Set-Cookie;
	}
	#limit_conn perip 50;
}
後端伺服器配置:upstream_admin_web_system.conf
upstream admin_web_system {
         server 192.168.254.100:8080 max_fails=2 fail_timeout=30s;
         server 192.168.254.100:8081 max_fails=2 fail_timeout=30s;
}

在上述配置中,還缺少統一存放日誌的目錄:/data/log/nginx/logs/admin_web_system,建立一下就好了。

接下來測試一下配置是否正確:

[[email protected] vhost]#cd ..
[[email protected] conf]# cd ..
[[email protected] nginx]# cd sbin/
[[email protected] sbin]# ./nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
提示一切正常就可以啟動了:
[[email protected] sbin]# ./nginx



相關推薦

Linux編譯安裝nginx

Nginx ("engine x") 是一個高效能的HTTP和反向代理伺服器,也是一個IMAP/POP3/SMTP 代理伺服器。 Nginx 是由Igor Sysoev為俄羅斯訪問量第二的Rambler.ru站點開發的,第一個公開版本0.1.0釋出於2004年10月4日。其將

Linux檢視jdk安裝目錄解除安裝jdkrpm命令rm命令引數

一、Linux中檢視jdk安裝目錄 [[email protected] ~]# whereis java java: /usr/bin/java /usr/local/java#java執行路徑 [[email protected] ~]# which java /usr/

linux 下的兩種軟體安裝方式 —— 原始碼(編譯安裝),編譯好的二進位制(直接安裝

我們以 GPG(加密工具)為例來說明兩種安裝方式的區別: 原始碼(Source code releases,名稱中則會含有src等說明資訊,tarball:source),先編譯再安裝 ./c

Linux環境下openssl交叉編譯安裝和裁剪

最近的專案需求中依賴libcrypto和libssl庫,所以需要編譯安裝openssl0.9.8e,花了差不多一天的時間終於成功安裝和裁剪,現在總結並分享個人的方法,貼出來供大家參考和指正。 方法如下(不同的平臺要根據實際環境更改相應的編譯工具): 一、配置: ./conf

Linux基礎第三天—Linux的軟連結與硬連結安裝nginx以及基本配置LNMP和LAMP的搭建

ln    建立硬連結 ln oldboy.txt oldgirl.txt    建立硬連結,原檔案oldboy.txt寫在前面,兩檔案inode相同,存在同一個block中, 內容同步刪除,但其中一個刪除 另一個並不會消失,因為block, l

linuxsublime Text安裝配置及搭建c/c++編譯系統

1. Sublime Text 3的下載安裝    到官方網站上http://www.sublimetext.com/3下載64位(系統位64位)的.deb安裝包(http://c758482.r82.cf2.rackcdn.com/sublime-text_build-3

OpenCV在linux平臺的編譯安裝和使用

分六個部分介紹: 一、下載跨平臺編譯工具 CMake  下載地址:http://www.cmake.org/cmake/resources/software.html二、解壓、編譯 CMake tar xvfz cmake-2.8.12.1.tar.gz makedir -

NginxLinux的線上安裝

第二步:先安裝Nginx依賴的包:nginx是C語言開發,建議在linux上執行,本教程使用Centos6.5作為安裝環境。n gcc 安裝nginx需要先將官網下載的原始碼進行編譯,編譯依賴gcc環境,如果沒有gcc環境,需要安裝gcc:yum install gcc-c+

Linux編譯安裝軟件的基本流程

參考 conf 控制 準備 all 開發 流程 src efi 1. 準備軟件包源文件 從互聯網下載相應的軟件包(以 .tar.gz 或 .tar.bz2 為後綴),將tarball文件解壓到/usr/local/src目錄下,並切換到軟件包目錄下 ; 2. ./con

linux的ssh安裝解除安裝與配置

注意:以下命令是在root下執行的,若沒root則要輸入su命令進入root環境下或命令前加上sudo,測試版本:ubuntu14.04 64位 ssh的安裝 安裝前先檢查linux下有沒有安

linux編譯C語言程序

編輯器 ins spa include all 運行程序 gcc linux中 style 1.首先安裝gcc編輯器 yum install gcc* -y 2.編寫C語言程序 [[email protected]/* */ ~]# vim aa.c #i

Linux 別名內部命令外部命令hash緩存表 系統調用時的優先級比較

別名、內部命令、外部命令、hash緩存表 Linux系統中別名、內部命令、外部命令、hash緩存表 優先級優先級比較 在我們平時使用Linux系統執行各種命令時,會發現命令在執行過程中會區分哪個優先執行,哪個其次執行,這裏我們來做個試驗證明一下。 別名:用a

LinuxCentos7下安裝Mysql(更名為Mariadb)

sys img mage 大小寫 alt utf image bsp 啟動服務 一、安裝:   yum install mariadb-server mariadb 二、啟動服務:   systemctl start mariadb 三、配置大小寫敏感問題、和字符為

linux軟件安裝方法總結

linuxlinux中軟件安裝方法:1 rpm -ivh 包名.rpm 有依賴問題,安裝A,A需要先安裝B,B先安裝C等。2 yum安裝,yum包管理器,yum安裝解決rpm安裝的依賴問題,安裝更簡單化。 優點:簡單,易用,高效 缺點:不能定制 centos切換在線yum源地址為ali

Linuxprofilebashrcbash_profile之間的區別和聯系(轉)

用戶登錄 upd rtu 文件輸入 當前 設定 log set less /etc/profile:此文件為系統的每個用戶設置環境信息,當用戶第一次登錄時,該文件被執行.並從/etc/profile.d目錄的配置文件中搜集shell的設置. 英文描述為: # /etc/pr

Linux編譯安裝配置 Qt 4.53全過程

雙擊 win port 環境 簡單的 類型 http you ner 最近準備做 Nokia 的 Symbian,Maemo 下觸摸屏開發。考慮到程序的跨平臺可移植性,最終選擇使用 Qt 開發。相對來說,國內關於 Qt 相關文檔並不算很多。作者將 Linux

linuxredis的安裝配置,後門漏洞修復及其攻擊方法整合

conf eid member 策略 ron 分享 正數 二進制 我想 Linux上redis安裝: 需先在服務器上安裝yum(虛擬機可使用掛載的方式安裝) 安裝配置所需要的環境運行指令: yum -y install gcc 進入解壓文件執行make 指令進行編譯 執

linuxCURL的安裝

官網下載 sta config tps 特性 onf erl nbsp 地址 curl是一款著名的字符界面下的下載工具,支持HTTP、HTTPS、FTP、FTPS、DICT、TELNET、LDAP、FILE,和GOPHER。此外還具有cookies支持、斷點續傳、FTP上傳

Linux編譯C文件

-s nbsp 最簡 通過 gcc 基本 linu 16px sub C/C++程序編譯的過程 預處理,展開頭文件,宏定義,條件編譯處理等。通過gcc -E source.c -o source.i或者cpp source.c生成。 編譯。這裏是一個狹義的編譯意義,指的是將

linuxcatmoreless命令區別詳解

more|less本文轉自:http://blog.csdn.net/xyw_blog/article/details/16861681在《Python絕技》這本書的第一個小程序首先展示了針對與unix系統中shadow文件密碼的暴力破解的能力,因為之前只是對shadow文件停留在保存了用戶密碼的階段,但並沒