CentOS 7 學習(二) 配置Nginx反向 Proxy

來源:互聯網
上載者:User

標籤:http   os   io   檔案   for   art   問題   ar   

CentOS 7 學習(二) 配置Nginx反向 Proxy

Nginx可以通過php-fpm來運行PHP程式,也可以轉向apache,讓apache調用php程式來運行。
不過對於Nginx來說,其反向 Proxy功能更值得研究,下面配置一下讓Nginx反向 Proxy3台Apache伺服器,同時配置memcache作為session儲存路徑
1、環境
CentOS 7 ,192.168.1.14, Apache 80, Nginx 808
CentOs 7 ,192.168.1.12,Apache 80
Ubuntu 14.04 Server, 192.168.1.161, Apache 80
2、配置Nginx,修改nginx.conf如下
http {
include mime.types;
default_type application/octet-stream;

#log_format main ‘$remote_addr - $remote_user [$time_local] "$request" ‘
# ‘$status $body_bytes_sent "$http_referer" ‘
# ‘"$http_user_agent" "$http_x_forwarded_for"‘;

#access_log logs/access.log main;

sendfile on;
#tcp_nopush on;

#keepalive_timeout 0;
keepalive_timeout 65;

#gzip on;


upstream php_server_pool{
server 192.168.1.12:80 weight=4 max_fails=2 fail_timeout=30s;
server 192.168.1.14:80 weight=4 max_fails=2 fail_timeout=30s;
server 192.168.1.161:80 weight=4 max_fails=2 fail_timeout=30s;
}
server {
listen 808;
server_name localhost;

#charset koi8-r;

#access_log logs/host.access.log main;

location / {
root html;
index index.html index.htm;

proxy_next_upstream http_502 http_504 error timeout invalid_header ;
proxy_pass http://php_server_pool;
proxy_set_header Host www.shiyq.com;
proxy_set_header X-Forwarded-For $remote_addr;
}

在http下一級增加upstream標籤,名字為php_server_pool,這是一個伺服器集區,增加三台主機,分別12、14、161,權重相同,失敗次數為2次,失敗時間為30秒。
在server的下一級的location /下增加
proxy_next_upstream http_502 http_504 error timeout invalid_header ;
proxy_pass http://php_server_pool;
proxy_set_header Host www.shiyq.com;
proxy_set_header X-Forwarded-For $remote_addr;
也很容易理解,如果出現502、504、逾時、無效標題頭就轉到下一台機器,根目錄轉到伺服器集區某台機器的根目錄。
重啟nginx,可以kill -HUP nginx
在三台機器的根目錄,編輯測試檔案,輸出訪問的主機地址
vim /etc/www/html/hello.php
<?php
echo $_SERVER[‘SERVER_ADDR‘] . ‘ Weclome you !‘;
?>
在瀏覽器中錄入:http://192.168.1.14:808/hello.php
可以根據頁面的輸出看到確實切換到了不同的機器
3、用memcache儲存session
用nginx做反向 Proxy非常容易,但是每次訪問都會切換機器(權重是相同的),可以用ip_hash指令讓nginx對於同一個session不切換機器,這個指令的效果暫且不論,想要測試這個環境就不太容易,你不清楚到底是切換無效了,還是ip_hash生效了,這個問題以後再研究,這裡採取memcache儲存session的方法來處理切換問題。
1)安裝memcache
CentOS 7 : yum install memcached php-pecl-memcache
Ubuntu 14.04: sudo apt-get install php5-memcache memcached
2)啟動memcache
在192.168.1.12上啟動memcache
memcached -u root
memcached的參數很多,可以指定記憶體、連接埠等等,有空可以研究,預設連接埠為12111,如果是root使用者,必須指定 -u 參數
配置防火牆,開放連接埠
如果是iptables,vim /etc/sysconfig/iptables,預設情況下,檔案中都會開放22連接埠,如下
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
複製這一行,將22改為11211即可,重啟防火牆
如果是firewalld,運行命令
firewall-cmd --add-port=11211/tcp
firewall-cmd --permanent --add-port=11211/tcp
測試效果
telent 192.168.1.12 12111
如果可以登入,說明啟動正常
3)修改php.ini來支援memcache儲存session
Ubuntu 14.04, sudo vim /etc/php5/apache2/php.ini ,修改檔案如下
session.save_handler = memcache
session.save_path = "192.168.1.12:11211"
CentOS 7,修改修改兩個檔案:/etc/php.ini,/etc/httpd/conf.d/php.conf
session.save_handler = memcache
session.save_path = "192.168.1.12:11211"
一定要注意要修改php.conf檔案,否則預設還是儲存在檔案裡
在info.php中,可以看到session的session.save_path和session.save_handler,有兩列local value和master value,一定都要改變才行,切記。
4)測試效果
在根目錄編輯檔案
vim login.php
<?php

echo $_SERVER[‘SERVER_ADDR‘].‘ Welcome you!‘;
session_start();

$_SESSION[‘name‘]=‘石永強-14‘;
$_SESSION[‘pwd‘]=‘密碼tt‘;
$session_id=session_id();
echo "sid:".$session_id."<br>";
echo ‘<br><a href="./read.php">read session</a>‘;

?>

vim read.php
<?php

echo $_SERVER[‘SERVER_ADDR‘].‘ Welcome you‘;
session_start();

$session_id=session_id();
echo "sid:".$session_id."<br>";

echo ‘name:‘.$_SESSION[‘name‘]."<br>";
echo ‘pwd:‘.$_SESSION[‘pwd‘]."<br>";

echo ‘<br><a href="./login.php">login session</a>‘;
?>
注意在不同的機器上,name變數的末尾和主機ip最後一個數字一致,如石永強-161,石永強-14
這樣重新整理http://192.168.1.14:808/login.php,可以看到地址在變化,點擊read session,可以看到最後一個session資訊,重新整理頁面,雖然主機切換了,但是session資訊不變。
用telnet 也可以看到
[[email protected] html]# telnet 192.168.1.12 11211
Trying 192.168.1.12...
Connected to 192.168.1.12.
Escape character is ‘^]‘.
get pd8k8rju5g4fpbfmm5kuaid3j0
VALUE pd8k8rju5g4fpbfmm5kuaid3j0 0 42
name|s:12:"石永強-12";pwd|s:6:"密碼";
END
其中pd8k8rju5g4fpbfmm5kuaid3j0是session ID,可以看到memcache儲存了session,可以共用

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.