佈署反向代理 Nginx
什麼是Nginx呢?Nginx 是一個類似 Apache 的 Server 平台。
相信不少人都有使用 Apache Server 的經驗
也有使用過 Tomcat 的經驗,並知道一個跑 80 port 一個是 8080 port
那一定有人會想說 不想讓 User 去記那麼多 port 有什麼方法呢?
有! 透過 Nginx 來做反向代理,User 只需要打 URL , port 部份 由 Server 收到後自行轉換
執行環境先確定是否有run apache 環境,可以先關閉。
sudo service apache2 stop
1. Nginx
安裝sudo apt-get install nginx
啟動 Nginx
sudo service nginx start
透過Browser開啟
http://localhost/確認 Nginx是否啟動 (顯示 Welcome to Nginx!)
關閉Nginx
sudo service nginx stop
2.PHP
安裝PHP相關套件sudo apt-get install php5 php5-gd php5-cli php5-cgi php5-fpm php5-mysql php5-mcrypt設定Nginx
sudo vim /etc/nginx/sites-available/default修改 root那行指向的位置 通常是
root /var/www修改 index那行
index index.html index.htm index.php在底下加入
location ~ \.php$ {若系統是 Ubuntu 12.10 (含以上)
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi_params;
}
則 fastcgi_pass 127.0.0.1:9000; 需改為
fastcgi_pass unix:/var/run/php5-fpm.sock; 才會動作
測試是否成功
在/var/www 資料夾新增一筆檔案 test.php 內容如下
<?php phpinfo();?>啟動Nginx 並測試是否成功顯示
sudo service nginx start如果有出現PHP資訊代表成功,關閉Nginx
http://localhost/test.php
sudo service nginx stop
3.MySQL
安裝sudo apt-get install mysql-server安裝過程中會要求root密碼
測試
mysql -u root -p輸入密碼,若登入成功 可 quit 或 exit 離開
MySQL 管理套件 phpMyAdmin
到phpMyAdmin官方下載最新的包 解開丟到/var/www
這邊就不作 累述
4.Tomcat
安裝到官方下載package包 解開丟入 /opt/tomcat7
sudo tar zxvf apache-tomcat-7.0.47.tar.gz啟動並測試
sudo mv apache-tomcat-7.0.47 /opt/tomcat7
sudo /opt/tomcat7/bin/startup.sh看到tomcat 貓貓管理頁面代表成功
http://localhost:8080
關閉Tomcat
sudo /opt/tomcat7/bin/shutdown.sh整合Nginx
修改 server.xml
sudo vim /opt/tomcat7/conf/server.xml修改nginx下proxy_params:
<Host name="localhost" appBase="webapps"...部份改為
<Host name="localhost" appBase="/var/www" //非必要 只是將專案位置更改而已
sudo vim /etc/nginx/proxy_params完整內容如下
proxy_set_header Host $host;修改nginx配置
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;
sudo vim /etc/nginx/sites-available/defaultindex行改為
index index.html index.htm index.php index.jsp添加location
location ~ \.jsp$ {測試
index index.jsp;
proxy_pass http://localhost:8080;
include proxy_params;
}
在/var/www/資料夾下 新增一筆 index.jsp
sudo mkdir -p /var/www/jsp輸入
sudo vim /var/www/jsp/index.jsp
<HTML>啟動Nginx 和Tomcat並測試
<BODY>
<%
out.println("IP:");
out.println(request.getHeader("x-forwarded-for"));
%>
<BODY/>
<HTML/>
sudo /opt/tomcat7/bin/startup.sh有顯示出IP情形代表成功
sudo service nginx start
http://localhost/jsp/
Tomcat 在佈署上 很容易發生 outOfmemory 可參考
http://www.mkyong.com/tomcat/tomcat-javalangoutofmemoryerror-permgen-space/
5.個人使用經驗
相信有在使用Tomcat的人應該會有使用.war檔來Deploy的經歷
其實在Tomcat default設定中有 auto Deploy
所以只要 把war檔丟入 /var/www中就會自動佈署
但是!如果你還是想要管理介面 那將tomcat底下webapp所有資料cp到/var/www下
可能會有控制權被 Nginx 吃掉的情形
此時可以新增 location 把控制全丟給project本身 只需要指定他run在8080 port就好
修改
新增
其實在Tomcat default設定中有 auto Deploy
所以只要 把war檔丟入 /var/www中就會自動佈署
但是!如果你還是想要管理介面 那將tomcat底下webapp所有資料cp到/var/www下
sudo cp -r /opt/tomcat7/webapps/* /var/www/而在佈署需要透過 servlet 或 會經由 web.xml 去控制的專案
http://localhost:8080 此時就會看到管理頁了
可能會有控制權被 Nginx 吃掉的情形
此時可以新增 location 把控制全丟給project本身 只需要指定他run在8080 port就好
修改
sudo vim /etc/nginx/sites-available/default
新增
location /projectname/ {
proxy_pass http://localhost:8080;
proxy_redirect off;
proxy_pass_request_headers on;
include proxy_params;
}
重啟Nginx
sudo service nginx restart
Done.
參考文章:
知道 Nginx proxt 這東西許久了,沒想到有個「反向代理」的說法,又上了一課啊!
回覆刪除