1. 程式人生 > >solaris10 編譯安裝nginx1.9,作TCP埠轉發

solaris10 編譯安裝nginx1.9,作TCP埠轉發

初次使用nginx,目的並不是為了做http代理,而是為了做TCP埠轉發,一開始安裝了nginx-1.4.1,搗鼓了很久,沒想到這個版本並不支援TCP埠轉發,雖然網上能搜到一些牛人自己寫的TCP轉發模組,加進原始檔進行編譯應該也是可以實現的,但是nginx自從1.9版本之後,已經能支援TCP埠轉發了。
為什麼不用HAproxy,因為我發現居然打不開官方網站,就算科學上網也不行。。。而且在solaris上編譯的時候有很多錯誤,也懶得去研究了。下面的所有操作我都是在root使用者下能成功,也有用過普通使用者進行,但是經常要不提示沒許可權,要不就是找不到命令,我就乾脆用root使用者進行操作了。

1、

將nginx-1.9.12.tar.gz和pcre-8.31.tar.gz拷到主機的/usr/src/目錄下.

2、 先編譯安裝PCRE.

gunzip pcre-8.31.tar.gz
tar xf pcre-8.31.tar
cd pcre-8.31
./configure

如果執行./configure有提示在環境變數$PATH中找不到c compiler,一般solaris系統是有安裝gcc的,只要宣告一下變數就行了:

export PATH=$PATH:/usr/sfw/bin

然後再重新編譯安裝

./configure
make && make install

3、

接下來編譯安裝nginx。

gunzip nginx-1.9.12.tar.gz
tar xf nginx-1.9.12.tar
cd nginx-1.9.12
./configure --with-stream --with-cc=/usr/sfw/bin/gcc
make && make install

configure的時候,因為nginx1.9雖然支援TCP轉發,但是這個模組並不是預設開啟的,所以必須加上–with-stream 引數將TCP轉發模組配置進來,可引數官網文章(http://nginx.org/en/docs/stream/ngx_stream_core_module.html

)–with-cc=/usr/sfw/bin/gcc是指明cc的位置。我這裡沒有指定安裝路徑,所以nginx預設安裝在/usr/local/nginx這個目錄,可以通過–with-prefix指定安裝目錄。

4、 配置nginx。

#user  nobody;  #執行使用者
worker_processes  1;    #啟動程序,通常設定成和cpu的數量相等

#全域性錯誤日誌
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid檔案
#pid        logs/nginx.pid;

#設定工作模式和連線數上限
events {
    #單個後臺worker process程序的最大併發連結數
    worker_connections  1024;
}

stream {
    upstream backend {
        hash $remote_addr consistent;

        #真實提供服務的主機
        server 127.0.0.1:22 weight=5 max_fails=3 fail_timeout=30s;
    }


    #安裝nginx的主機
    server {
        listen 10001;    #偵聽的埠
        proxy_connect_timeout 1s;
        proxy_timeout 3s; #如果轉發的是ssh服務,建議註釋掉,有個這個配置,如果3s內沒請求,nginx會把連線中斷
        proxy_pass backend;
    }

}

啟動nginx的時候,如果提示“nginx: [error] open() “nginx: [error] open() “/usr/local/nginx/logs/nginx.pid” failed (2: No such file or directory)”

解決方法是啟動的時候,使用-c引數指定nginx.conf檔案的位置就可以解決:

./nginx -c /usr/local/nginx/conf/nginx.conf