安装依赖库:
yum install -y gcc
yum install -y pcre-devel zlib zlib-devel openssl openssl-devel pcre pcre-devel
下载源码包:
地址:https://nginx.org/download,选择需要的版本,如:
wget https://nginx.org/download/nginx-1.14.2.tar.gz
解压:
tar -zxvf nginx-1.14.2.tar.gz
cd nginx-1.14.2
配置编译选项:
./configure --prefix=/usr/local/nginx --with-http_ssl_module
如果只需要架设一个普通的支持SSL网站,上面的选项也就足够了,读者可又跳过本节。
其它内置选项:
--with-stream // 1.9以后版本支持TCP反向代理(区别于HTTP反向代理)
--with-http_auth_request_module // 1.12以后版本支持代理认证
添加nginx-rtmp-module模块:
下载:
git clone https://github.com/arut/nginx-rtmp-module.git
增加选项:
--add-module=../nginx-rtmp-module // 支持rtmp推拉流,指定模块位置
注意:外部模块要放在nginx的同级目录,请留意--add-module这里都是以相对目录载入的,下同。
添加echo-nginx-module模块:
下载:
git clone https://github.com/agentzh/echo-nginx-module.git
增加选项:
--add-module=../echo-nginx-module // 支持echo函数
对Lua的支持:
需要先安装LuaJIT,并且添加ngx_devel_kit,lua-nginx-module模块:
LuaJIT下载:
官网:http://luajit.org/
wget -c http://luajit.org/download/LuaJIT-2.0.4.tar.gz
tar xzvf LuaJIT-2.0.4.tar.gz
cd LuaJIT-2.0.4
sudo make install PREFIX=/usr/local/luajit
注意环境变量!
export LUAJIT_LIB=/usr/local/luajit/lib
export LUAJIT_INC=/usr/local/luajit/include/luajit-2.0
添加ngx_devel_kit模块:
下载:
git clone https://github.com/simpl/ngx_devel_kit.git
增加选项:
--add-module=../ngx_devel_kit // 支持ngx工具开发
添加lua-nginx-module模块:
下载:
git clone https://github.com/openresty/lua-nginx-module.git
增加选项:
--add-module=../lua-nginx-module // 支持lua
确定好需要的选项,统一配置,如:
./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-stream --with-http_auth_request_module
--add-module=../nginx-rtmp-module
--add-module=../echo-nginx-module
--add-module=../ngx_devel_kit
--add-module=../lua-nginx-module
以上选项除了支持HTTPS站点,还支持HTTP反向代理、TCP反向代理、RTMP直播、LUA。
编译、安装:
make
sudo make install
测试:
/usr/local/nginx/sbin/nginx -t
输出以下信息,表示安装成功:
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
若输出如下错误,表示/usr/local/nginx/logs目录不存在:
nginx: [alert] could not open error log file: open() "/usr/local/nginx/logs/error.log" failed (2: No such file or directory)
2016/09/13 19:08:56 [emerg] 6996#0: open() "/usr/local/nginx/logs/access.log" failed (2: No such file or directory)
解决办法:
sudo mkdir /usr/local/nginx/logs
若输出错误,这是由于找不到libluajit-5.1.so.2:
../sbin/nginx: error while loading shared libraries: libluajit-5.1.so.2: cannot open shared object file: No such file or directory
解决办法,使用locate libluajit发现安装在/usr/local/luajit/lib目录下:
vim /etc/ld.so.conf,加入:
/usr/local/luajit/lib
然后,sudo ldconfig
启动:
sudo /usr/local/nginx/sbin/nginx
其它操作:
sudo /usr/local/nginx/sbin/nginx -s reload // 重新装载配置
sudo /usr/local/nginx/sbin/nginx -s stop // 安全退出
常用配置:
连接数配置:
编辑 /usr/local/nginx/conf/nginx.conf,修改:
#worker_processes 1;
worker_processes auto;
worker_rlimit_nofile 65535;
events {
# worker_connections 1024;
use epoll;
worker_connections 65535;
}
......
HTTP反向代理 + 限速配置:
......
http {
limit_conn_zone $binary_remote_addr zone=addr:10m;
upstream proxy82 {
server 127.0.0.1:81;
}
server {
listen 82;
location / {
#limit_conn addr 100;
limit_rate_after 100k;
limit_rate 50k;
proxy_max_temp_file_size 0;
proxy_pass http://proxy82;
proxy_set_header Host $host;
proxy_set_header X-real-ip $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
}
}
}
......
说明:
limit_conn_zone $binary_remote_addr zone=addr:10m;
表示创建一个连接内存区域,名称为addr,大小为10M,内容为客户端IP。
limit_conn addr 100;
表示限制每个IP的连接数为100个。
limit_rate_after 100k;
表示在传输100K之后发起限速。
limit_rate 50k;
表示限制每条连接的传输速度在100K。
proxy_max_temp_file_size 0;
nginx做为代理时,默认是打开响应缓冲的,它会把从源获取的响应先写入内存中,当内存写满时会写入临时文件,这里设置为0表示关闭写临时文件。
TCP反向代理配置:
......
stream {
upstream proxy3306 {
#hash $remote_addr consistent;
server 127.0.0.1:3306 weight=1 max_fails=3 fail_timeout=30s;
}
server {
listen 3307;
#proxy_pass 127.0.0.1:3306;
proxy_pass proxy3306;
proxy_connect_timeout 3s;
proxy_timeout 60s;
}
}
......
说明:
proxy_connect_timeout 3s;
表示配置连接后端超时时间为3S。
proxy_timeout 60s;
表示配置与后端连接空闲时间为60S,之后自动断开,可用于异常连接清理。
缓存代理服配置:
......
http {
proxy_cache_path /dev/shm/nginx/cache levels=1:2 keys_zone=shm:10m inactive=1h max_size=2g use_temp_path=off;
upstream proxy83 {
server 127.0.0.1:80;
}
server {
listen 83;
location / {
proxy_pass http://proxy83;
proxy_set_header Host $host;
proxy_set_header X-real-ip $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_cache_key $host$uri$is_args$args;
proxy_cache shm;
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
expires 2h;
proxy_cache_lock on;
add_header X-Via $server_addr;
#add_header X-Cache $upstream_cache_status;
add_header X-Cache '$upstream_cache_status from $host';
}
}
}
......
说明:
proxy_cache_path /dev/shm/nginx/cache levels=1:2 keys_zone=shm:10m inactive=1h max_size=2g use_temp_path=off;
表示设置缓存的目录(必须先创建)和选项,这里将目录设置在内存盘上:/dev/shm/nginx/cache。
proxy_cache_lock on;
表示开启回源锁定,防止多个请求同一时间请求同一文件时造成并发回源。
写在最后:
本文有点囫囵吞枣,涉及的内容比较多,而且很多细节都没有描述清楚,抱歉!说明下,本文是我根据以前的日记整理的,一些细节在脑子里已经不太清楚,而且我觉得后续有必要自己重新上机操作验证后,再补充这些方面的细节,欢迎关注。