[置頂] JBOSS EAP實戰(2)-集群、NGINX集成、隊列與安全
來源:程序員人生 發布時間:2016-08-15 08:40:04 閱讀次數:6208次
JBOSS HTTP的Thread Group概念
JBOSS是1個企業級的J2EE APP Container,因此它和任何1種成熟的企業級中間件1樣具有Thread Group的概念。
所謂Thread Group就是1個HTTP隊列機制,利用Thread Group在JBOSS內可以設置如“阻斷”,“升級”,“降級”等機制。
來看1個這樣的實際利用場景:
當你的JBOSS連著1堆核心利用時,此時突然你的HTTP的并發要求在某1個點激增,如果把這些HTTP要求都放進后臺,那末將意味著你所有的核心模塊將會遭到嚴重的影響,因此1般來講對這樣的場景我們會采取以下的幾種措施:
- 阻斷,除去定額的要求,其它要求進不進來,即拋棄策略
- 隊列,除去定額的要求,其它要求排隊,排隊排到前端超時,出錯
- 自動擴大,即給定1個定額的最大要求數,當超過這個要求數后Container會根據本身服務器的能力自動擴大
JBOSS的Thread Group的種類
在JBOSS里使用的正是Thread Group來支持這幾種機制的,我們來看1下這幾種機制在JBOSS中的實現:
- unbounded-queue-thread-pool
- bounded-queue-thread-pool
- blocking-bounded-queue-thread-pool
- queueless-thread-pool
- blocking-queueless-thread-pool
- scheduled-thread-pool
做過開發的相信1眼就看出來,其實這6種JBOSS提供的HTTP Thread Group正是JAVA多線程內ConcurrentThreadPool的線程種類。
本文對6種線程不做逐一探討,他們的區分從字面上相信讀者可以馬上理解,在配置時參數略有不同,對每一個不同種類的Thread Group讀者可以自行通過JBOSS官方文檔(以下URL)獲得它們的區分:
https://developer.jboss.org/wiki/ThreadPoolConfiguration
本文只作JBOSS EAP6中如何進行Thread Group的配置。
動手配置1個Thread Group
打開$JBOSS_HOME/standalone/configuration/standalone.xml文件
找到<subsystem xmlns=”urn:jboss:domain:threads:1.1“>這句,把它改成:
<subsystem xmlns="urn:jboss:domain:threads:1.1">
<thread-factory name="http-connector-factory" group-name="jboss1-thread-pool" thread-name-pattern="HTTP-%t" priority="9"/>
<unbounded-queue-thread-pool name="jboss1-thread-pool">
<max-threads count="250"/>
<keepalive-time time="20" unit="seconds"/>
<thread-factory name="http-connector-factory"/>
</unbounded-queue-thread-pool>
</subsystem>
找到<subsystem xmlns=”urn:jboss:domain:web:2.2“ default-virtual-server=”default-host“ native=”false“>這句,再往下找到:
<connector name=“http” protocol=“HTTP/1.1”這1句,把這1句改成:
<connector name="http" protocol="HTTP/1.1" scheme="http" socket-binding="http" executor="jboss1-thread-pool" max-connections="250"/>
重啟JBOSS便可
用Security Domain保密認證信息
為何要加密? 我們來看下面這個例子:
<datasource jndi-name="java:/comp/env/jdbc/jbpm" pool-name="DroolsDS" enabled="true" use-java-context="true">
<connection-url>jdbc:mysql://192.168.0.101:3306/guvnor</connection-url>
<driver>mysql</driver>
<pool>
。。。
</pool>
<user-name>drools</user-name>
<password>password_1</password>
</datasource>
雖然,你可以說這個配置文件是位于企業內網的,內網就安全了?萬1有有心人。。。由于安全的主旨是“寧可信其有(小偷),不可信其無”。
因此1般來講在生產環境我們是需要對這個配置文件中的敏感信息進行加密的。
JBOSS對配置文件中的加密有兩種方式:
1. Picketbox(推薦全部用這類方式)
2. Vault(不合適于DOMAIN模式、很繁瑣)
用Security Domain保密認證信息-Picketbox方式
確保你使用的是JBOSS EAP6.2⑹.4或更高版本,在Linux中啟動1個shell,敲入以下命令行:
export JBOSS_HOME=/opt/jboss
export CLASSPATH=${JBOSS_HOME}/modules/system/layers/base/org/picketbox/main/picketbox⑷.1.1.Final-redhat⑴.jar:${JBOSS_HOME}/modules/system/layers/base/org/jboss/logging/main/jboss-logging⑶.1.4.GA-redhat⑵.jar:$CLASSPATH
java org.picketbox.datasource.security.SecureIdentityLoginModule EncryptedPassword
此處的”EncryptedPassword”就是我們需要加密的“明文”,接下去它會輸出如:
Encoded password:
⑹e9c0a6a3bb1e4c0這邊的“Encoded password:”后的就是被加密后的密文
然后,我們需要建立1個Security-Domain,我們在<profile name=“full”>段下找到
<subsystem xmlns="urn:jboss:domain:security:1.2">
<security-domains>
由于我們用的是domain模式啟動的jboss,因此,你不能找到1個”security-domains”就去改,由于domain模式是根據profile name來辨別配置段的,如果你的security-domain加在default下,而啟動使用的是full模式那末你的配置是無效的。
我們在
<subsystem xmlns="urn:jboss:domain:security:1.2">
<security-domains>
段下加入
<security-domain name="encrypted-ds" cache-type="default">
<authentication>
<login-module code="org.picketbox.datasource.security.SecureIdentityLoginModule" flag="required">
<module-option name="username" value="drools"/>
<module-option name="password" value="⑹e9c0a6a3bb1e4c0"/>
</login-module>
</authentication>
</security-domain>
有了security-domain我們就能夠在我們的配置中利用它了,如我們在datasource配置處使用security-domain
<datasource jndi-name="java:/comp/env/jdbc/jbpm" pool-name="DroolsDS" enabled="true" use-java-context="true">
<connection-url>jdbc:mysql://192.168.0.101:3306/guvnor>
<driver>mysql</driver>
<pool>
。。。
</pool>
<security>
<security-domain>encrypted-ds</security-domain>
</security>
</datasource>
用Security Domain保密認證信息-vault模式
使用vault模式要求我們先需要在JBOSS中建立自己的VAULT,我們使用以下命令:
$JBOSS_HOME/bin/vault.sh
出現以下字符界面:
JBoss Vault
JBOSS_HOME: /Volumes/Disk01/appservers/center/jboss-eap⑹.1
JAVA: java
============================================================
**********************************
**** JBoss Vault ***************
**********************************
Please enter a Digit::
0: Start Interactive Session 1: Remove Interactive Session 2: Exit
按選0
Enter directory to store encrypted files:[輸入] ../vault/
Enter Keystore URL:[輸入] ../vault/ymkeyes.keystore
Enter Keystore password: [輸入]aaaaaa
Enter Keystore password again: [輸入]aaaaaa
Enter 8 character salt: [輸入]12345678
Enter iteration count as a number (Eg: 44): [輸入]44
Enter Keystore Alias: [輸入] ymkeyes
Initializing Vault
2013⑺⑴8 11:08:02 org.picketbox.plugins.vault.PicketBoxSecurityVault init
INFO: PBOX000361: Default Security Vault Implementation Initialized and Ready
Vault Configuration in AS7 config file:
********************************************
</extensions>
<vault>
<vault-option name="KEYSTORE_URL" value="../vault/ymkeyes.keystore"/>
<vault-option name="KEYSTORE_PASSWORD" value="MASK⑴TWrTaqRsEC"/>
<vault-option name="KEYSTORE_ALIAS" value="ymkeyes"/>
<vault-option name="SALT" value="11136231"/>
<vault-option name="ITERATION_COUNT" value="8"/>
<vault-option name="ENC_FILE_DIR" value="../vault/"/>
</vault> ...
********************************************
Vault is initialized and ready for use
Handshake with Vault complete
Please enter a Digit::
0: Store a secured attribute 1: Check whether a secured attribute exists 2: Exit
按選0
把上面從<vault>開始到</valult>這1塊復制進standalone.xml文件中,放于</extensions>段后
對屏幕中輸出的以下信息,注意紅色加粗字體即是你用vault加密后的加密串。
Secured attribute value has been stored in vault.
Please make note of the following:
********************************************
Vault Block:ds_MegaeyesDS
Attribute Name:password
Shared Key:MjY5Nzc0OWItMmI2OS00NWMyLTlkZTYtOWY0MWE5YzAyOGMwTElORV9CUkVBS21lZ2FleWVz
Configuration should be done as follows:
VAULT::ds_oracleds::password::MjY5Nzc0OWItMmI2OS00NWMyLTlkZTYtOWY0MWE5YzAyOGMwTElORV9CUkVBS21lZ2FleWVz
********************************************
有了VAULT,你就能夠在你的配置文件中如我們在<datasource>中,以下配置:
<datasources>
<datasource jndi-name="java:/comp/env/jdbc/jbpm" pool-name="DroolsDS" enabled="true" use-java-context="true">
<connection-url>jdbc:mysql://192.168.0.101:3306/guvnor</connection-url>
<driver>mysql</driver>
<pool>
<min-pool-size>10</min-pool-size>
<max-pool-size>25</max-pool-size>
<flush-strategy>IdleConnections</flush-strategy>
</pool>
<security>
<user-name>drools</user-name>
<password>${VAULT::ds_oracleds::password::1}</password>
</security>
</datasource>
注意加密串還要前后加上
${加密串}才可生效
可以看出,使用這類方式的加密,太繁瑣,而且它不支持DOMAIN模式即不可以使用在集群環境中。
JBOSS集群
啊。。。集群,又是集群。
JBOSS集群是從3.X開始那差不多是在14年前就開始支持集群了。
目前的JBOSS EAP6.2⑹.4或是JBOSS8.0(WILDFLY)對集群的支持已到了登峰造極的地步了,而且最主要的是JBOSS的集群具有以下特點:
- 任意橫向、縱向折分
- JBOSS VM-JBOSS自己可以虛擬出1堆的JBOSS來
- 集中管控,即Controller,利用這1點它可以做到1點布署多點利用,這類集中統1布署的功能只有在IBM的WAS中才具有,即Domain Management的功能

JBOSS集群-橫向縱向折分
試想1下這類架構:

如果在這個架構中任何1個SLAVE產生了宕機,那末對全部集群來講用戶的訪問是照舊可以用的。
但是,我們試想1下,如果JBOSS MASTER都宕機了呢?

因而,我們有了以下的架構:

這樣,在任意1點產生不可預感的宕機時,我們的全部集群的服務還是延續可用的只要不是所有的節點都宕掉。
所謂橫向、縱向

JBOSS可以縱橫交錯,任意劃分出無數臺“JBOSS虛擬機”從而構成1個“網狀”結構
由于JBOSS采取了類似于IBM WAS的域控理念,因此它可以做到“集中統1布署”,即只要在主控端發布1個程序,該主控端下屬所有的MASTER、SLAVER全部會自動布署。而這個自動化“分發”的進程,是不需要人為干涉的。它意味著我們的運維開發不需要1個個手工COPY war包到每一個J2EE APP SERVER上去了。

JBOSS虛擬機
JBOSS也引入了時下最時興的“VM”技術,即你可以啟動1個JBOSS Instance,然后在這個JBOSS的Instance中為每個不同的JBOSS子Container指定它們的參數、乃至JVM核心參數

JBOSS集群搭建
說了這么多,我們就來搭建1個JBOSS集群吧!
先來計劃我們的JBOSS集群,在我們的例子中我們不使用JBOSS虛擬機,我們使用2個真實的JBOSS Instance即啟動兩個不同JVM進程的JBOSS來實現MASTER-SLAVER的模式。
我們先來計劃我們的JBOSS集群。

我們建立兩個JBOSS實例,使其分別名為:
JBOSS_MASTER1
JBOSS_SLAVE1

JBOSS集群1定用的是DOMAIN模式來去運行的,即$JBOSS_HOME/bin/domain.sh來運行的,因此我們記得把兩個JBOSS的$JBOSS_HOME/domain/configuration/host.xml文件中的下面這段:
<management-interfaces>
<native-interface security-realm="ManagementRealm">
<socket interface="management" port="${jboss.management.native.port:9999}"/>
</native-interface>
<http-interface security-realm="ManagementRealm">
<socket interface="management" port="${jboss.management.http.port:9990}"/>
</http-interface>
</management-interfaces>
以上配置中的9999與9990確保兩個JBOSS Instance中的這兩個端口1定不能1樣,如我的slave中的此處配置為:
<management-interfaces>
<native-interface security-realm="ManagementRealm">
<socket interface="management" port="${jboss.management.native.port:19999}"/>
</native-interface>
</management-interfaces>
你也能夠把slave中的host.xml文件COPY1份然后使用host-slave.xml改名成host.xml文件
MASTER和SLAVE的host.xml文件的區分還有1點,來看SLAVE的host.xml文件下面這1處:
<domain-controller>
<remote host="${jboss.domain.master.address:192.168.0.101}" port="${jboss.domain.master.port:9999}" security-realm="ManagementRealm"/>
</domain-controller>
從這邊可以看到slave中有1個<domain-controller>段,在這個段內所指向的 ManagementRealm的IP與端口必須是它的master即Master主機中host.xml文件中的ManagementReal所設的IP與PORT。
注意host.xml文件中的頭部信息
<?xml version='1.0' encoding='UTF⑻'?>
<host name="slave1" xmlns="urn:jboss:domain:1.7">
不要忘了把<host后加入1個”name”,這邊的
name很重要!!!
JBOSS集群有1個很重要的步驟,即:
加入每一個MASTER的SLAVE,是以JBOSS中的用戶名和密碼來“認證”的,即每一個SLAVE要加入Master,Master必須允許。
因此,此處的host name=“”就是SLAVE 用戶名,那末密碼呢?
請在JBOSS MASTER所在的目錄中運行add-user.sh命令,然后建1個用戶名,這個用戶名必須=host后的name,另外,在建完用戶后把該用戶的密碼(顯示為MD5值)記下,然后在slave所在的host.xml文件中把密碼設進去,依照以下例子:

由于JBOSS是以GROUP的概念來管理它的集群的,以下圖:

所以我們需要把我們的8080與8081這兩臺主機加入到1個GROUP中去。
在slave的host.xml文件中增加入下內容
<servers>
<server name="slave1" group="kie-server-group" auto-start="true">
<socket-bindings socket-binding-group="full-sockets" port-offset="1"/>
</server>
<servers>
這邊幾個地方需要注意的:
- group,如果不同的host屬于同1個group,那末它們將同屬于1個master管理
- full-sockets:JBOSS中有ha, full, full-ha 3種profile,我們在此使用的是full模式,相對應的socket為full-sockets
- port-offset 為端口偏移量,在剛才的步驟中我們對ManagementRealm中的兩個端口是手設的,可是還有其它1堆的端口,多達10幾個,我們總不至于1個個去手改吧,因此這邊的port-offset為“除去managementreal”中的端口號其它所有端口號(固然不包括1些利用自己在內部開設的1些端口)+1,比如說:master的web端口為8080,那末slave1的web端口就會變成8081, slave2設成port-offset=2那末slave2的web端口就為8082了,是否是很方便?
相應的,在master機上的host.xml文件中也需要有這么1句:
<servers>
<server name="master1" group="kie-server-group" auto-start="true">
</server>
</servers>
配置domain.xml文件,你可以把slave上的domain.xml備份1下,然后把domain-slave.xml文件改名成domain.xml文件來作修改(如果你不是1個熟手的話),事實上JBOSS對domain.xml和host.xml文件分別提供了master, slave模式供你使用,如果你改壞了,你也能夠通過JBOSS對修改過保存過的配置文件自動進行備份和版本控制這個功能來回退。

其實domain.xml文件中主要的是對JBOSS“資源”的配置,如:
datasource,system properties, jvm。
由于JBOSS使用的是Domain Controller模式,因此對JBOSS中1切資源的使用只需要在Controller上配置便可。
你可以把JBOSS的controller相像成1個“獅子座”,它的占有欲極強。
由于在本例中我們使用的是1臺MASTER,1臺SLAVE,因此這臺MASTER又同時是CONTROLLER,固然在機器富足的情況下你也能夠斟酌CONTROLLER掛1臺MASTER,然后MASTER下再掛1臺或是多臺SLAVE。
此處還需要注意的是domain.xml文件很長,它里面有這樣的開頭:
<profiles>
<profile name="default">
而這樣的profile會有3處重復,所不同的是profile name=“full”, profile name=“full ha”,因此你的<server group>設的是甚么profile,你的需要設置的資源也需要在domain.xml文件中放在哪一個profile段。 此例中我們使用的是full,因此我們的DataSource, System Properties等就都放在了這個段里。
我們之前在MASTER和SLAVE的host.xml文件中分別把2臺主機都加入到了1個叫kie-server-group的段,因此我們需要在domain.xml文件中加入1個server group的聲明段,以下示例:
<server-groups>
<server-group name="kie-server-group" profile="full">
<socket-binding-group ref="full-sockets"/>
</server-group>
</server-groups>
此處需要注意的是,如果使用domain模式啟動,各group中的jboss實例雖然都各自使用domain.sh命令啟動,并且你在domain.sh所調用的環境配置命令domain.conf中設置了如: -Xms6144m -Xmx6144m 這樣的JVM參數,但其實你還需要在domain中劃分出的不同的jboss實例中再次作1下聲明,為何?
由于JBOSS啟動實例用的是domain.sh+domain.conf中JVM所設的JVM參數,而JBOSS真正運行起來后用于RUN相干的布署的利用用的卻是JBOSS內的“Domain JVM”,而你在domain.conf中設置的JVM參數只是給JBOSS啟動時所使用的,其實不是這個JBOSS實例如:運行某個布署的.war包時所使用的真實的JVM,而1旦該JBOSS實例加入了某個group時,當這個實例開始布署或是運行某個.war包或是.ear包時,如果你沒有設過domain jvm參數,那末它的實際可用JVM堆默許只有256MB。
這就是為何外面很多人說,JBOSS集群1旦啟動,發覺本來在單節點運行的好好的web利用在集群環境下卻會報out of memory或是gc overhead limit。
讓我們在MASTER和SLAVE上的host.xml文件中為我們的2個JBOSS實例配置虛擬JVM參數吧
Master上的host.xml文件中的設置
<server name="master1" group="kie-server-group" auto-start="true">
<jvm name="master1" debug-enabled="false">
<heap size="6144m" max-size="6144m"/>
<permgen size="512m" max-size="768m"/>
<jvm-options>
<option value="-XX:-UseGCOverheadLimit"/>
</jvm-options>
</jvm>
<socket-bindings socket-binding-group="full-sockets" port-offset="0"/>
</server>
Slave上的host.xml文件中的設置
<server name="slave1" group="kie-server-group" auto-start="true">
<socket-bindings socket-binding-group="full-sockets" port-offset="1"/>
<jvm name="slave1" debug-enabled="false">
<heap size="6144m" max-size="6144m"/>
<permgen size="512m" max-size="768m"/>
<jvm-options>
<option value="-XX:-UseGCOverheadLimit"/>
</jvm-options>
</jvm>
</server>
全部配完后分別使用:
/opt/jboss_master1/bin/domain.sh
/opt/jboss_slave1/bin/domain.sh
命令把master和slave啟動起來吧。
啟動后我們打開主控真個WEB管理界面http://192.168.0.101:9990,可以看到以下網絡拓撲結構。

其實,嘿嘿!
剛才那1段繁瑣枯燥的配置,你也完全可以把MASTER先啟動起來后通過http://192.168.0.101:9990界面進入后可視化進行操作,看到這兒有人可能會想“打我”了,可是。。。如果你拿圖形界面配過無數次后也能像我1樣手配XML文件了,而且手配XML文件。。。速度更快!

在JBOSS集群中布署利用
布署1個利用,在這邊我也想用xml文件來說解。。。可是又怕有人“打我”,但是在集群環境下的布署分為:
.war包
.war格式的目錄(exploded war)
而JBOSS的自帶的http://192.168.0.101:9990只支持圖形化布署.war包。。。不支持布署.war格式的目錄,因此我們還是用xml文件配置的方式來講吧(你們終究反正是要把我打1頓的,?)
先來講1下集群環境下的.war包的布署吧,我們以petstore.war來舉例,我們把master-slave結構搭完后,直接依照以下步驟操作


JBOSS會把這個變成1個兩進制文件并以GUID的方式重命名該文件,并把它置于MASTER的/domain/servers/master_name/data目錄。
我們注意這個$MASTER_JBOSS_HOME/domain/server目錄,這下面還會有1個slave1的目錄,這是JBSOS自動生成的,因此MASTER所掛集群下所有節點的日志、啟動信息、布署都必須在此目錄內尋覓,而不是再手工跑到每一個JBOSS節點中去尋覓了。這也正是JBOSS的domain controller集中管控思想的體現。
在此步驟,你只是把需要deploy的文件上傳到了主控域上且并未開始布署,為了完成真實的布署,你需要點擊【Assign】按鈕
1旦你點擊了Assign按鈕后,你會得到1個彈出界面,在此界面內會提示你要把這個.war Assign給哪個group,此時,1旦當你把1個war Assign給了某個group并點擊了【肯定】后,JBOSS會作以下的事情:
- 從Controller開始先布署MASTER
- 再布署該Controller下所掛的SLAVER、SLAVER中的MASTER,S`SLAVE
如果你的Controller下掛的節點是1顆很復雜的“樹”,它也會1鍵完成所有節點的deploy。
布署完后,我們來查看1下我們的集群利用:


看,2個地址都可以訪問了。
使用NGINX來對JBOSS集群作“分發”
網上很多教程使用的都是Apache的mod_模塊,相當的繁瑣。
與Nginx相比Apache弱到爆了,我們來看1下Nginx是怎樣完成對jboss集群的分發的吧。
http {
rewrite_log on;
default_type application/octet-stream;
charset utf⑻;
sendfile on;
tcp_nopush on;
keepalive_timeout 60;
tcp_nodelay on;
client_header_buffer_size 4k;
large_client_header_buffers 4 32k;
server_names_hash_bucket_size 128;
upstream j2eeserver {
server 192.168.0.101:8080;
server 192.168.0.101:8081;
}
include mime.types;
log_format main '$remote_addr $remote_user [$time_local] "$request" $http_host '
'$status $upstream_status $body_bytes_sent "$http_referer"'
'"$http_user_agent" $ssl_protocol $ssl_cipher $upstream_addr'
'$request_time $upstream_response_time';
access_log logs/
access.log main;
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.1;
gzip_comp_level 2;
gzip_types text/plain application/x-javascript text/css application/xml;
gzip_vary on;
server {
listen 80;
server_name 192.168.0.101 localhost;
charset utf⑻;
#
access_log logs/host.
access.log main;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://j2eeserver;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
我們來實驗1下吧。
cd /usr/local/nginx
./nginx –c /usr/local/nginx.conf
啟動后訪問:http://192.168.0.101/petstore (此時不用加端口號了)

然后我們在后臺,隨便殺掉master或是slave進程

我們來殺master進程吧

重新訪問http://192.168.0.101/petstore, look,還是跑得剛剛的!我們的集群成功了。

這邊我們也不用作甚么消息分離了,就讓NGINX全部轉發JBOSS的要求便可,由于你公司也不差這點內存、CPU,做甚么消息分離。。。non sense!
JBOSS集群中如何布署exploded war
所謂exploded war即“打碎了的war”,意思就是1個文件目錄,它是以.war結尾的并且要符合war的目錄結構標準。
要布署這樣的文件目錄情勢其實很簡單,你只要打開主控域上的domain.xml文件,在其中加入這樣的語句,.war目錄可以隨意置放在何處, wherever u want:
<deployments>
<deployment name="petstore.war" runtime-name="petstore.war">
<fs-exploded path="/opt/jboss_master1/domain/data/petstore.war"/>
</deployment>
</deployments>
然后回到http://ip:9990 這個圖形化界面中就會看到在主控域上有1個.war已被Deploy,但還沒有被Assign,此時你只要做相應的Assign操作便可完成全部JBOSS集群的布署了。
附上Nginx的安裝
Nginx需要依賴下面3個包
1. gzip 模塊需要 zlib 庫 ( 下載: http://www.zlib.net/ ) zlib⑴.2.8.tar.gz
2. rewrite 模塊需要 pcre 庫 ( 下載: http://www.pcre.org/ ) pcre⑻.21.tar.gz
3. ssl 功能需要 openssl 庫 ( 下載: http://www.openssl.org/ ) openssl⑴.0.1.tar.gz
注意:如果用源碼安裝的話,后面nginx安裝的時候需要指定 --with-pcre 對應的緊縮包路徑
openssl:
tar -xzvf openssl⑴.0.1.tar.gz
cd openssl⑴.0.1
./config(注意) && make && make install
pcre: tar -xzvf pcre⑻.21.tar.gz
cd pcre⑻.21
./configure && make && make install
zlib: tar -xzvf zlib⑴.2.8.tar.gz
cd zlib⑴.2.8
./configure && make && make install
通過 http://nginx.org/download/ 下載nginx最新版,本例中使用的是nginx⑴.8.1.tar.gz,下載解壓落后入nginx源碼目錄使用下面命令進行1鍵式編譯安裝:
./configure --sbin-path=/usr/local/nginx/nginx --conf-path=/usr/local/nginx/nginx.conf --pid-path=/usr/local/nginx/nginx.pid --with-http_ssl_module --with-pcre=../pcre⑻.38 --with-zlib=../zlib⑴.2.8 --with-openssl=../openssl⑴.0.2g --with-http_stub_status_module --user=nginx --group=nginx
全部成功后,在/usr/local目錄下就會生成1個nginx目錄,nginx就安裝在此目錄內了。
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈