RT
Linux 版本: CentOS-6.4-x86_64
一 安裝
對於Centos版本的Linux環境下,yum源未提供nginx的安裝,可通過切換yum源的方法獲取安裝,也可通過直接下載安裝包的方法,以下命令均需root權限執行:
首先安裝必要的庫(nginx中gzip模塊需要zlib庫,rewrite模塊需要pcre庫,ssl功能需要openssl庫)。選定/usr/local爲安裝目錄,以下具體版本號根據實際改變。
1. 安裝 openssl 庫
本人之前在安裝 Mysql 時安裝過。若沒安裝,下載 openssl-1.0.1e-57.el6.x86_64.rpm(openssl庫下載),安裝過程見 Linux下mysql的安裝過程 中。
2.安裝 pcre 庫
我們可以使用rpm 命令 rpm -qa pcre 進行查詢是否已安裝pcre
若未安裝,或版本不匹配(本人使用pcre-8.36的版本),兩種安裝方式: 如下:
方式一(手動安裝):
下載 pcre-8.36.tar.gz
解壓 tar -zxvf pcre-8.36.tar.gz 到目錄 /usr/pcre-8.36/(先創建pcre-8.36目錄)
cd pcre-8.36
依次執行命令 ./configure 、make 、make install
方式二:(依次執行以下命令)
cd /usr/pcre/(先創建pcre目錄)
wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.36.tar.gz
tar -zxvf pcre-8.36.tar.gz
cd pcre-8.36
./configure
make
make install
報錯及解決方案:
(1)若報錯缺少 libpcre.so.0 ,需下載 pcre-7.8-7.el6.x86_64.rpm 安裝。
複製到路徑後,執行命令:rpm -ivh pcre-7.8-7.el6.x86_64.rpm
(2)若在執行命令 ./configure 報錯
configure: error: You need a C++ compiler for C++ support.
解決辦法 yum install -y gcc -c++
3. 安裝zlib庫
cd /usr/zlib/(先創建zlib目錄)
wget http://zlib.net/zlib-1.2.8.tar.gz
tar -zxvf zlib-1.2.8.tar.gz
cd zlib-1.2.8
./configure
make
make install
4.安裝ssl
cd /usr/ssl/(先創建ssl目錄)
wget http://www.openssl.org/source/openssl-1.0.1j.tar.gz
tar -zxvf openssl-1.0.1j.tar.gz
cd openssl-1.0.1j
./config
make
make install
5.安裝Nginx
cd /usr/nginx(先創建nginx目錄)
wget http://nginx.org/download/nginx-1.8.0.tar.gz
tar -zxvf nginx-1.8.0.tar.gz
cd nginx-1.8.0
./configure --prefix=/usr/local/nginx
make
make install
啓動 Nginx
/usr/local/nginx/sbin/nginx
報錯:
Nginx啓動提示找不到 libpcre.so.1 解決方法,或提示沒有此命令或目錄
執行命令 [root@z ~]# ln -s /usr/local/lib/libpcre.so.1 /lib64
重新啓動nginx即可
訪問
直接輸入Nginx 服務器ip即可。
無法訪問的解決方案:
在linux上搭建上nginx服務器後,啓動nginx,在windows輸入linux ip訪問失敗,原因就是所有訪問的默認端口都是80,而在linux防火牆沒有配置讓80端口訪問,那麼在windows上就會失敗。
解決方法:
在linux終端輸入: vim /etc/sysconfig/iptables。進入編輯界面,這個時候要想編輯內容,按字母 ‘o’。之後配置即可:
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
按 ‘ESC’鍵退出編輯模式,按 :wq! 退出並保存。 再使用 /etc/init.d/iptables restart
命令重啓防火牆配置生效即可。
常用命令
啓動:
/usr/local/nginx/sbin/nginx
重啓:
/usr/local/nginx/sbin/nginx -s reload
停止:
/usr/local/nginx/sbin/nginx -s stop
測試配置文件是否正常:
/usr/local/nginx/sbin/nginx -t
反向代理配置
nginx.conf 原配置
location / {
root html;
index index.html index.htm;
}
反向代理配置如下
server_name 123.ztest.com;
location / {
proxy_pass http://192.168.123.123:8080/ztest_web/;
index index.html index.htm;
}
在客戶端(本機windows)host文件中,配置
192.168.123.123 123.ztest.com
訪問 123.ztest.com 即是訪問http://192.168.123.123:8080/ztest_web/index
訪問 123.zlf.com/indexTest 即是訪問 http://192.168.123.123:8080/ztest_web/indexTest
使用 nginx 解決跨域問題
前端ajax訪問請求域名與瀏覽器訪問的域名地址不一致時,存在跨域問題。
跨域問題的解決方案有很多,比如:
jsonp(支持get請求、不支持post請求)
httpclient 進行內部轉發
使用http響應頭允許跨域問題
使用Nginx搭建企業api接口網關
使用Spring ZULL 接口網關
如何使用Nginx搭建接口網關?
Nginx 接口網關攔截所有請求,進行分發。
實現原理:利用域名相同、項目名不同的特徵,由Nginx攔截後,跳轉到真實的地址。
配置:如A、B兩個項目,域名爲 123.ztest.com,在 nginx.cnf 中配置如下:
server {
listen 80;
server_name 123.ztest.com;
location /A {
proxy_pass http://a.a.com:81/A;
index index.html index.htm;
}
location /B{
proxy_pass http://b.b.com:81/B;
index index.html index.htm;
}
}
負載均衡
即增加 upstream backserver 的配置
①輪詢機制:
upstream backserver {
server 192.168.123.123:8080; #不能配置具體的項目
server 192.168.123.124:8080;
}
server {
listen 80;
server_name 123.ztest.com;
location / {
proxy_pass http://backserver;
index index.html index.htm;
}
}
②權重機制
upstream backserver {
server 192.168.123.123:8080 weight=2;
server 192.168.123.124:8080 weight=4;
}
**注意:**權重是個比例關係,上述配置,即訪問123爲1次後,訪問124兩次,依次輪換。