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两次,依次轮换。