、簡介:javascript
Tomcat在高併發環境下處理動態請求時性能很低,而在處理靜態頁面更加脆弱。雖然Tomcat的最新版本支持epoll,可是經過Nginx來處理靜態頁面要比經過Tomcat處理在性能方面好不少。php
2、下載安裝:css
下載nginxhtml
http://nginx.org/en/download.htmljava
下載解壓後放到C:\nginx-1.0.4(官網這樣要求的,不知道放其它盤有沒有問題)node
啓動nginx.exe,而後在瀏覽器輸入127.0.0.1便可python
配置本身的項目測試mysql
第二環節咱們使用了默認的nginx.conf 。Nginx的配置文件都存於目錄conf文件下,其中nginx.conf是它的主配置文件。linux
如下爲我加上註釋並配置的新的虛擬server]nginx
#號爲註釋內容,咱們在cmd下運行nginx
啓動成功,出錯的話,能夠查詢日誌(日誌路徑是配置文件指定的,你能夠修改存到其它位置)
訪問一下第二個server 配置的localhost:8666地址,結果出現
3、Nginx能夠經過如下兩種方式來實現與Tomcat的耦合:
將靜態頁面請求交給Nginx,動態請求交給後端Tomcat處理。
將全部請求都交給後端的Tomcat服務器處理,同時利用Nginx自身的負載均衡功能進行多臺Tomcat服務器的負載均衡。
下面經過兩個配置實例分別講述這兩種實現
1、動態頁面和靜態頁面分離的實例
這裏假定Tomcat服務器的IP地址爲192.168.12.130,同時Tomcat服務器開放的服務器端口爲8080。Nginx相關配置代碼以下:
在這個實例中,首先定義了一個虛擬主機www.ixdba.net,而後經過location指令將/web/www/html/img/目錄下的靜態文件交給Nginx來完成。最後一個location指令將全部以.jsp、.do結尾的文件都交給Tomcat服務器的8080端口來處理,即http://192.168.12.130:8080。
須要特別注意的是,在location指令中使用正則表達式後,proxy_pass後面的代理路徑不能含有地址連接,也就是不能寫成http://192.168.12.130:8080/,或者相似http://192.168.12.130:8080/jsp的形式。在location指令不使用正則表達式時,沒有此限制。
二、多個tomcat負載均衡的實例
這裏假定有3臺Tomcat服務器,分別開放不一樣的端口,地址以下:
1
2
3
|
192.168
.
12.131
:
8000
192.168
.
12.132
:
8080
192.168
.
12.133
:
8090
|
Nginx的相關配置代碼以下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
upstream mytomcats {
server
192.168
.
12.131
:
8000
;
server
192.168
.
12.132
:
8080
;
server
192.168
.
12.133
:
8090
;
}
server {
listen
80
;
server_name www.ixdba.net;
location ~* \.(jpg|gif|png|swf|flv|wma|wmv|asf|mp3|mmf|zip|rar)$ {
root /web/www/html/;
}
location / {
proxy_pass http:
//mytomcats;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout
90
;
proxy_send_timeout
90
;
proxy_read_timeout
90
;
proxy_buffer_size 4k;
proxy_buffers
4
32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
|
我是搞php出身,天然安裝lnmp是常規技能。之前的手段仍是lnmp安裝包,好比軍哥的lnmp1.0。隨着php和mysql的更新,大多數一鍵安裝都開始版本老化,更新困難的問題。所以,從新研究了一下Ubuntu下lnmp的安裝,發現如今簡單的多,記錄一下。
另外最近在學習golang,Ubuntu下安裝天然也是必須的過程。不過golang的安裝也有一些奧妙。固然,不是源碼安裝的啦。
Ubuntu下的包管理器是apt-get
或者說dpkg
。常規的安裝命令apt-get install
(注意權限sudo apt-get install
)。Nginx是這幾個軟件裏最友好的,直接能夠添加stable源:
add-apt-repository ppa:nginx/stable
或者development源:
add-apt-repository ppa:nginx/development
若是沒有安裝命令add-apt-repository
,安裝:
apt-get install python-software-properties
以後常規的操做:
apt-get update apt-get install nginx service nginx start
PHP的ppa源有個老兄專門在作,Ondrej Sury。有php5.4,php5.5和php5.6的源,具體的能夠看官方頁面。 爲何沒有5.3?你落伍啦!5.4+性能提升不少,5.5還有內置的ZendOpCache
。安裝php5.5:
add-apt-repository ppa:ondrej/php5
apt-get update apt-get install php5 php5-fpm service php5-fpm start
還有些必要的包,安裝一下,記得重啓php5-fpm:
apt-get install php5-gd php5-curl php5-sqlite php5-mysqlnd php5-mcrypt service php5-fpm restart
至於nginx怎麼配置php-fpm,一搜一大把,很少說。
仍是這個老兄,維護着mysql5.5, mysql5.6 和 MariaDB5.5。因此,很簡單,好比安裝MariaDB(不喜歡mysql,被oracle摧殘了):
add-apt-repository ppa:ondrej/mariadb-5.5
apt-get update apt-get install mariadb-server-5.5 service mysql start
這裏注意,安裝會提示InnoDB Plugin Disabled
。沒關係,MariaDB把InnoDB內置進去了,實際上是已經啓動的。具體的能夠:
mysql SHOW ENGINE INNODB STATUS;
重頭戲是golang啦。我搜尋了半天ppa源,只找到一個能夠安裝golang1.1.1的源,很不爽。其實能夠golang官方下載已經編譯好的linux.tar.gz。可是須要本身手動設置GOROOT
,有點麻煩啊。
終於仍是發現了個好工具Godeb。實際上這就是一個deb包構建器。先把官方編譯好的tar.gz下載,打包成deb而後執行安裝。
以64位安裝爲例:
wget https://godeb.s3.amazonaws.com/godeb-amd64.tar.gz tar -zxvf godeb-amd64.tar.gz ./godeb install
就開始安裝最新版本。還可查看支持的版本,並安裝特定版本:
./godeb list 1.2 1.2rc5 1.2rc4 1.2rc3 1.2rc2 1.2rc1 1.1.2 1.1.1 1.1 (...) ./godeb install 1.1
安裝好後,能夠用go env
查看,是否安裝完成。
剩下的設置GOPATH
,GOBIN
就不贅述了。我是修改在/etc/profile
裏面的。
Ubuntu下不少東西都有源,容易安裝,也是好事啊。
第一步,安裝nginx
apt-get update
apt-get install nginx
便可完成安裝
啓動nginx:
/etc/init.d/nginx start
而後就能夠訪問了,http://localhost/ , 一切正常!若是不能訪問,先不要繼續,看看是什麼緣由,解決以後再繼續。
第二步,安裝Php和mysql
安裝php和MySQL:
apt-get install php5-cli php5-cgi mysql-server-5.0 php5-mysql
第三步,安裝FastCgi和配置
咱們須要/usr/bin/spawn-fcgi這個文件,而它是屬於lighttpd這個包裏面的,因此咱們安裝lighttpd而後把它設置爲開機不啓動:
apt-get install lighttpd #咱們只要/usr/bin/spawn-fcgi
rcconf #去掉lighttpd開機自啓動--------------------------------------------強烈推薦
修改nginx的配置文件:/etc/nginx/sites-available/default
修改 server_name 192.168.200.100;
修改index的一行修改成:
index index.php index.html index.htm;
去掉下面部分的註釋並修改成:
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/nginx-default$fastcgi_script_name;
include /etc/nginx/fastcgi_params;
}
在server{}內定義日誌文件的位置和相應的格式:
access_log /var/log/nginx/localhost_access.log combined;
access_log off;//表示關閉
從新啓動nginx:
/etc/init.d/nginx stop
/etc/init.d/nginx start
啓動fastcgi php:
spawn-fcgi -a 127.0.0.1 -p 9000 -C 10 -u www-data -f /usr/bin/php-cgi
如下步驟我直接運行rcconf設置php-cgi爲開機自啓動便可,因此跳過
---------------------------------------爲了讓php-cgi開機自啓動:
cd /etc/init.d
cp nginx php-cgi
vim php-cgi
替換nginx爲php-cgi
並修改相應部分爲:
DAEMON=/usr/bin/spawn-fcgi
DAEMON_OPTS="-a 127.0.0.1 -p 9000 -C 10 -u www-data -f /usr/bin/php-cgi"
...
stop)
echo -n "Stopping $DESC: "
pkill -9 php-cgi
echo "$NAME."
-------------------------------------------------
在/var/www/nginx-default/目錄下建立一個文件: /var/www/nginx-default/index.php
文件內容是:
< ?php phpinfo();?>
而後瀏覽器訪問nginx就能夠看到一切正常了
------------------------------------------------------------END 安裝成功
配置文件目錄 /etc/nginx/ nginx.conf /sites-available/default
www目錄 /var/www/nginx-default/
啓動fastcgi php:
spawn-fcgi -a 127.0.0.1 -p 9000 -C 10 -u www-data -f /usr/bin/php-cgi
日誌文件:
localhost.access.log /var/log/nginx/localhost.access.log
access.log /var/log/nginx/access.log
error.log /var/log/nginx/error.log
---------------重定向nginx錯誤頁面的方法
error_page 404 /404.html;
這個404.html保證在nginx主目錄下的html目錄中便可,若是須要在出現404錯誤後直接跳轉到另一個地址,能夠直接設置以下:
error_page 404 http://www.***.net ;
一樣的方式能夠定義常見的40三、500等錯誤。
特別注意的是404.html文件頁面大小要超過512k,否則會被ie瀏覽器替換爲ie默認的錯誤頁面。
------------------------------虛擬主機配置
server {
listen 80;
server_name localhost;
access_log /var/log/nginx/localhost.access.log;
location / {
root /var/www/nginx-default;
index index.php index.html index.htm;
}
location /doc {
root /usr/share;
autoindex on;
allow 127.0.0.1;
deny all;
}
location /images {
root /usr/share;
autoindex on;
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/nginx-default$fastcgi_script_name;
include /etc/nginx/fastcgi_params;
}
}
server {
listen 80;
server_name sdsssdf.localhost.com;
access_log /var/log/nginx/localhost.access.log;
location / {
root /var/www/nginx-default/console;
index index.php index.html index.htm;
}
location /doc {
root /usr/share;
autoindex on;
allow 127.0.0.1;
deny all;
}
location /images {
root /usr/share;
autoindex on;
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/nginx-default$fastcgi_script_name;
include /etc/nginx/fastcgi_params;
}
}
----------------------監控
location ~ ^/NginxStatus/ {
stub_status on; #Nginx 狀態監控配置
}
這樣經過 http://localhost/NginxStatus/(最後的/不能掉) 監控到 Nginx 的運行信息:
Active connections: 1
server accepts handled requests
1 1 5
Reading: 0 Writing: 1 Waiting: 0
NginxStatus 顯示的內容意思以下:
-------------------------------靜態文件處理
經過正則表達式,咱們可以讓 Nginx 識別出各類靜態文件
location ~ \.(htm|html|gif|jpg|jpeg|png|bmp|ico|css|js|txt)$ {
root /var/www/nginx-default/html;
expires 24h;
}
對於例如圖片、靜態 HTML 文件、js 腳本文件和 css 樣式文件等,咱們但願 Nginx 直接處理並返回給瀏覽器,這樣能夠大大的加快網頁瀏覽時的速度。所以對於這類文件咱們須要經過 root 指令來指定文件的存放路徑,同時由於這類文件並不常修改,經過 expires
指令來控制其在瀏覽器的緩存,以減小沒必要要的請求。 expires
指令能夠控制 HTTP 應答中的「 Expires 」和「 Cache-Control 」的頭標(起到控制頁面緩存的做用)。您可使用例如如下的格式來書寫 Expires:
expires 1 January, 1970, 00:00:01 GMT;
expires 60s;
expires 30m;
expires 24h;
expires 1d;
expires max;
expires off;
這樣當你輸入http://192.168.200.100/1.html的時候會自動跳轉到var/www/nginx-default/html/1.html
例如 images 路徑下的全部請求能夠寫爲:
location ~ ^/images/ {
root /opt/webapp/images;
}
------------------------動態頁面請求處理[集羣]
Nginx 自己並不支持如今流行的 JSP、ASP、PHP、PERL 等動態頁面,可是它能夠經過反向代理將請求發送到後端的服務器,例如 Tomcat、Apache、IIS 等來完成動態頁面的請求處理。前面的配置示例中,咱們首先定義了由 Nginx 直接處理的一些靜態文件請求後,其餘全部的請求經過 proxy_pass 指令傳送給後端的服務器 (在上述例子中是 Tomcat)。最簡單的 proxy_pass
用法以下:
location / {
proxy_pass http://localhost:8080;
proxy_set_header X-Real-IP $remote_addr;
}
這裏咱們沒有使用到集羣,而是將請求直接送到運行在 8080 端口的 Tomcat 服務上來完成相似 JSP 和 Servlet 的請求處理。
當頁面的訪問量很是大的時候,每每須要多個應用服務器來共同承擔動態頁面的執行操做,這時咱們就須要使用集羣的架構。 Nginx 經過 upstream
指令來定義一個服務器的集羣,最前面那個完整的例子中咱們定義了一個名爲 tomcats 的集羣,這個集羣中包括了三臺服務器共 6 個 Tomcat 服務。而 proxy_pass 指令的寫法變成了:
# 集羣中的全部後臺服務器的配置信息
upstream tomcats {
server 192.168.0.11:8080 weight=10;
server 192.168.0.11:8081 weight=10;
server 192.168.0.12:8080 weight=10;
server 192.168.0.12:8081 weight=10;
server 192.168.0.13:8080 weight=10;
server 192.168.0.13:8081 weight=10;
}
location / {
proxy_pass http://tomcats;# 反向代理
include proxy.conf;
}
----------------------壓力測試
wget http://blog.s135.com/soft/linux/webbench/webbench-1.5.tar.gz
tar zxvf webbench-1.5.tar.gz
cd webbench-1.5
make && make install
#webbench -c 100 -t 10 http://192.168.200.100/info.php
參數說明:-c表示併發數,-t表示持續時間(秒)
root@ubuntu-desktop:/etc/nginx/sites-available# webbench -c 100 -t 10 http://192.168.200.100/info.php
Webbench - Simple Web Benchmark 1.5
Copyright (c) Radim Kolar 1997-2004, GPL Open Source Software.
Benchmarking: GET http://192.168.200.100/info.php
100 clients, running 10 sec.
Speed=19032 pages/min, 18074373 bytes/sec.
Requests: 3172 susceed, 0 failed.
曾經配置過nginx比較高版本的安裝方法及流程,此次也是在阿里雲服務器ubuntu14.04.1版本安裝nginx+php+mysql的方法及流程。
原文地址:http://adminsir.net/Home/Content/index/id/7.html
一、先更新ubuntu系統
更新命令
sudo apt-get update
sudo apt-get upgrade
二、更新和安裝update and install
sudo apt-get update sudo apt-get install nginx
三、啓動nginx
sudo /etc/init.d/nginx start
四、check version(說明安裝成功)
nginx -v
五、配置php+mysql
sudo apt-get install php5-cli php5-cgi mysql-server php5-mysql
六、安裝FastCgi
sudo apt-get install spawn-fcgi
七、配置nginx
7.一、修改nginx的配置文件:/etc/nginx/sites-available/default 修改主機名
server_name localhost;
7.二、修改index的一行,添加index.php
index index.php index.html index.htm;
7.三、去掉下面部分的註釋用於支持 php 腳本:
location ~ .php$ { fastcgi_split_path_info ^(.+.php)(/.+)$; # # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini # # # With php5-cgi alone: fastcgi_pass 127.0.0.1:9000; # # With php5-fpm: # fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }
八、 從新啓動nginx
sudo /etc/init.d/nginx restart sudo /etc/init.d/nginx stop sudo /etc/init.d/nginx start
九、啓動fastcgi php
spawn-fcgi -a 127.0.0.1 -p 9000 -C 10 -u www-data -f /usr/bin/php-cgi
十、nginx提示502 Bad Gateway錯誤
nginx 502 Bad Gateway錯誤之一:Fastcgi沒有啓動,啓動命令是:
spawn-fcgi -a 127.0.0.1 -p 9000 -C 10 -u www-data -f /usr/bin/php-cgi
十一、設置php-cgi開機自啓動
爲了讓php-cgi開機自啓動:Ubuntu開機以後會執行/etc/rc.local文件中的腳本
因此咱們能夠直接在/etc/rc.local中添加啓動腳本。
spawn-fcgi -a 127.0.0.1 -p 9000 -C 10 -u www-data -f /usr/bin/php-cgi
添加到語句:
exit 0
前面才行
十二、no input file specified錯誤
sudo vi /etc/nginx/sites-available/default
location ~ .php$ { root html; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /var/www/nginx-default$fastcgi_script_name; include fastcgi_params; }
location ~ .php$ { fastcgi_split_path_info ^(.+.php)(/.+)$; # # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini # # # With php5-cgi alone: fastcgi_pass 127.0.0.1:9000; # # With php5-fpm: # fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }
注意
fastcgi_param SCRIPT_FILENAME /var/www/nginx-default$fastcgi_script_name;
/var/www/nginx-default 改成你的網站根目錄,通常就是改爲這個。 server 字段下root 目錄和網站根目錄保持一致
Ubuntu下安裝nginx
sudo apt-get install nginx
Ubuntu安裝以後的文件結構大體爲:
全部的配置文件都在/etc/nginx下,而且每一個虛擬主機已經安排在了/etc/nginx/sites-available下
程序文件在/usr/sbin/nginx
日誌放在了/var/log/nginx中
並已經在/etc/init.d/下建立了啓動腳本nginx
默認的虛擬主機的目錄設置在了/var/www/nginx-default
啓動nginx
sudo /etc/init.d/nginx start
而後就能夠訪問了,http://localhost/ , 一切正常!若是不能訪問,先不要繼續,看看是什麼緣由,解決以後再繼續。
nginx默認頁面
配置php和mysql
安裝Php和mysql
安裝php和MySQL:
sudo apt-get install php5-cli php5-cgi mysql-server php5-mysql
安裝FastCgi
/usr/bin/spawn-fcgi這個文件來管理 FastCgi,它原屬於lighttpd這個包裏面,但 9.10 後,spawn-fcgi 被分離出來單獨成包:
sudo apt-get install spawn-fcgi
配置 nginx
修改nginx的配置文件:/etc/nginx/sites-available/default 修改主機名:
server_name localhost;
修改index的一行修改成:
index index.php index.html index.htm;
去掉下面部分的註釋用於支持 php 腳本:
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/nginx-default$fastcgi_script_name;
include /etc/nginx/fastcgi_params;
}
從新啓動nginx:
/etc/init.d/nginx stop
/etc/init.d/nginx start
啓動fastcgi php:
spawn-fcgi -a 127.0.0.1 -p 9000 -C 10 -u www-data -f /usr/bin/php-cgi
爲了讓php-cgi開機自啓動:
cd /etc/init.d
cp nginx php-cgi
vim php-cgi
替換nginx爲php-cgi
並修改相應部分爲:
DAEMON=/usr/bin/spawn-fcgi
DAEMON_OPTS="-a 127.0.0.1 -p 9000 -C 10 -u www-data -f /usr/bin/php-cgi"
...
stop)
echo -n "Stopping $DESC: "
pkill -9 php-cgi
echo "$NAME."
而後運行rcconf設置php-cgi爲開機自啓動
建立、測試phpinfo:
sudo vi /var/www/nginx-default/info.php
打開 http://localhost/info.php 。