Nginx快速應用及資料庫、Websocket長連線反向代理
1、下載安裝包
下載nginx: http://nginx.org/download/nginx-1.10.3.tar.gz
下載openssl : http://www.openssl.org/source/openssl-fips-2.0.9.tar.gz
下載zlib : http://zlib.net/zlib-1.2.11.tar.gz
下載pcre : ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.38.tar.gz
(同步安裝包已一併打包)
如果沒有安裝c++編譯環境,還得安裝,通過yum install gcc-c++完成安裝
2、編譯安裝
安裝前請確認openssl zlib pcre是否安裝,若沒有,請按照以下順序進行安裝,否則nginx會因為無法找到依賴包而無法安裝
openssl :
[[email protected]] tar zxvf openssl-fips-2.0.9.tar.gz
[[email protected]] cd openssl-fips-2.0.9
[[email protected]] ./config && make && make install
pcre:
[[email protected]] tar zxvf pcre-8.3
[[email protected]] cd pcre-8.38
[[email protected]] ./configure && make && make install
zlib:
[[email protected]]tar zxvf zlib-1.2.11.tar.gz
[[email protected]] cd zlib-1.2.11
[[email protected]] ./configure && make && make install
nginx
[[email protected]]tar zxvf nginx-1.8.0.tar.gz
[[email protected]] cd nginx-1.8.0
[[email protected]] ./configure && make && make install
3、啟動nginx
[[email protected]] /usr/local/nginx/sbin/nginx (啟動)
[[email protected]] /usr/local/nginx/sbin/nginx –s reload (重啟)
[[email protected]] /usr/local/nginx/sbin/nginx –s stop (關閉)
4、錯誤解決
1.[[email protected] lib]# error while loading shared libraries: libpcre.so.1: cannot open shared object file: No such file or directory
原因 在RedHat 64位機器上nginx讀取的pcre檔案為/lib64/libpcre.so.1檔案,預設安裝pcre時libpcre.so檔案安裝在/usr/local/lib/目錄下,所以輸入/opt/nginx/sbin/nginx -V 找不到檔案路徑!!
1.首先確定安裝了pcre.
2.切換路徑: cd /usr/local/lib 執行 ln -s /usr/local/lib/libpcre.so.1
3.root許可權下新增軟連結 /usr/local/lib/libpcre.so.1 到 /lib64/ : ln -s /usr/local/lib/libpcre.so.1
2.
檢查埠號衝突
- 檢查nginx是否已經啟動,其本身佔用該埠號
- 檢查是否有別的程式佔用該埠號
- 修改nginx的埠號 /usr/local/nginx/conf/nginx.conf
注:[[email protected] ~]# netstat –apn (檢查埠號使用情況)
5、確認是否啟動成功
開啟瀏覽器 – 輸入 192.168.1.168(ip地址):81(埠號) 顯示一下內容說明啟動成功
成功後頁面:
5、nginx相關配置
對 /usr/local/nginx/conf/nginx.conf 檔案進行編輯
1.配置埠號與訪問首頁
2.配置需要代理的ip地址
3.配置允許訪問的路徑
4. nginx.conf已與安裝包一併打包.可參考
6、長連線的反向代理
長連線反向代理一般用在一些特殊情況,比如資料庫在某些雲伺服器上,資料庫只能通過SSH通道來進行連線,也就是說只有某臺雲伺服器可以連這個資料庫,別的人想直接訪問資料庫是不行的,這個時候如果想在外網直接能訪問到雲伺服器內部資料庫,就需要在能訪問的那臺雲伺服器做反向代理,把自身的某個埠號,對映到資料庫的連線地址上面,這裡要注意一下nginx的版本,低版本的是不能建立長連線代理的,nginx版本至少1.9的版本,版本太低沒有stream這個功能
stream模組預設沒有編譯到nginx, 編譯nginx時候 ./configure –with-stream 即可
主要用的是stream的配置:
比如我在nginx的配置檔案引入了另外一個配置檔案
看一下這個配置檔案:
打了馬賽克部分的是IP地址和埠號,表示你下方監聽的埠號要對映到哪個IP及埠 ,示例:192.168.1.123:3306
提供一份文字格式的
stream {
upstream cloudsocket {
hash $remote_addr consistent;
# $binary_remote_addr;
server 192.168.1.167:3306 weight=5 max_fails=30 fail_timeout=360s;
}
upstream redissocket {
hash $remote_addr consistent;
# $binary_remote_addr;
server 192.168.1.167:6379 weight=5 max_fails=30 fail_timeout=360s;
}
server {
listen 84;#資料庫伺服器監聽埠
proxy_connect_timeout 36000s;
proxy_timeout 36000s;#設定客戶端和代理服務之間的超時時間,如果5分鐘內沒操作將自動斷開。
proxy_pass cloudsocket;
}
server {
listen 81;#資料庫伺服器監聽埠
proxy_connect_timeout 36000s;
proxy_timeout 36000s;#設定客戶端和代理服務之間的超時時間,如果5分鐘內沒操作將自動斷開。
proxy_pass redissocket;
}
}
意思就是監聽本伺服器84埠, 如果有連線,則反向代理到192.168.1.167:3306;
監聽本伺服器的81埠,如果有連線,則反向代理到192.168.1.167:6379;
OK 重啟nginx ......................
這樣子就搞定啦~~~~~~
皮皮皮,就是皮~~~~~~~~~~~~~~~~~~~