nginx服务器
作用:是一个高性能的HTTP和反向代理服务器,同时也是一个
IMAP/POP3/SMTP代理服务器。
Nginx配置文件及目录:
/usr/local/nginx 安装目录
-conf/nginx.conf 主配置文件
-html 网页目录
-logs 日志文件
-sbin/nginx 启动脚本
/usr/local/nginx/sbin/nginx –v 查看Nginx版本
/usr/local/nginx/sbin/nginx –V 查看编译参数
/usr/local/nginx/sbin/nginx –t 测试默认配置文件
/usr/local/nginx/sbin/nginx –c conf/nginx.conf 指定配置文件
查看服务相关进程及端口信息
ps aux |grep nginx
netstat -lnatpu |grep nginx
步骤一:构建Nginx服务器
1)使用源码包安装nginx软件包
yum –y install gcc pcre-devel(支持正则) openssl-devel (支持加密网站) //安装常见依赖包
useradd –s /sbin/nologin nginx 创建nginx用户
tar -xf nginx-1.8.0.tar.gz
cd nginx-1.8.0
./configure \
--prefix=/usr/local/nginx \ //指定安装路径
--user=nginx \ //指定用户
--group=nginx \ //指定组
--with-http_ssl_module //开启SSL加密功能
make && make install //编译并安装
2)nginx命令的用法
/usr/local/nginx/sbin/nginx //启动服务
/usr/local/nginx/sbin/nginx -s stop //关闭服务
/usr/local/nginx/sbin/nginx -s reload //重新加载配置文件
/usr/local/nginx/sbin/nginx –V //查看软件信息
nginx服务默认通过TCP 80端口监听客户端请求:
netstat -anptu | grep nginx
3)为Nginx Web服务器建立测试首页文件
Nginx Web服务默认首页文档存储目录为/usr/local/nginx/html/,在此目录下建立一个名为index.html的文件:
touch /usr/local/nginx/html/index.html
步骤二:升级Nginx服务器
1)编译新版本nginx软件
tar -zxvf nginx-1.9.0.tar.gz
cd nginx-1.9.0
./configure \
--prefix=/usr/local/nginx \ //指定安装路径
--user=nginx \ //指定用户
--group=nginx \ //指定组
--with-http_ssl_module //开启SSL加密功能
make
2) 备份老的nginx主程序,并使用编译好的新版本nginx替换老版本
mv /usr/local/nginx/sbin/nginx >/usr/local/nginx/sbin/nginxold
cp objs/nginx /usr/local/nginx/sbin/ //拷贝新版本
make upgrade //升级
/usr/local/nginx/sbin/nginx –v //查看版本
步骤三:客户端访问测试
1)分别使用浏览器和命令行工具curl测试服务器页面
firefox http://192.168.4.5
curl http://192.168.4.5
用户认证
访问Web页面需要进行用户认证
用户名为:tom,密码为:123456
通过Nginx实现Web页面的认证,需要修改Nginx配置文件,在配置文件中添加auth语句实现用户认证。最后使用htpasswd命令创建用户及密码即可。
步骤一:修改Nginx配置文件
1)修改/usr/local/nginx/conf/nginx.conf
vim /usr/local/nginx/conf/nginx.conf
.. ..
server {
listen 80;
server_name localhost;
auth_basic "Input Password:"; 认证提示符
auth_basic_user_file "/usr/local/nginx/pass"; 认证密码文件
location / {
root html;
index index.html index.htm;
}
}
2)生成密码文件,创建用户及密码
使用htpasswd命令创建账户文件,需要确保系统中已经安装了httpd-tools。
yum -y install httpd-tools
htpasswd -cm /usr/local/nginx/pass tom 创建密码文件
New password: 123456
Re-type new password: 123456
htpasswd -m /usr/local/nginx/pass jerry 追加用户,不使用-c选项
3)重启Nginx服务
usr/local/nginx/sbin/nginx –s reload
请先确保nginx是启动状态才可以执行命令成功,否则报错
步骤二:客户端测试
1)登录192.168.4.100客户端主机进行测试
firefox http://192.168.4.5 //输入密码后可以访问
基于域名的虚拟主机
实现两个基于域名的虚拟主机,域名分别为www.aa.com和www.bb.com
对域名为www.aa.com的站点进行用户认证,用户名称为tom,密码为123456
修改Nginx配置文件,添加server容器实现虚拟主机功能;对于需要进行用户认证的虚拟主机添加auth认证语句。
步骤一:修改配置文件
1)修改Nginx服务配置,添加相关虚拟主机配置如下
vim /usr/local/nginx/conf/nginx.conf
.. ..
server { 定义虚拟主机
listen 80; 端口
server_name www.aa.com; 域名
auth_basic "Input Password:"; 认证提示符
auth_basic_user_file "/usr/local/nginx/pass"; 认证密码文件
location / { 发布目录
root html; 指定网站根路径
index index.html index.htm;
}
}
… …
server {
listen 80;
server_name www.bb.com;
location / {
root www;
index index.html index.htm;
}
}
2)创建账户及密码
htpasswd –cm /usr/local/nginx/pass tom 创建账户密码文件
3)创建网站根目录及对应首页文件
mkdir /usr/local/nginx/www
echo "www" > /usr/local/nginx/www/index.html
4)重启nginx服务
/usr/local/nginx/sbin/nginx –s reload
步骤二:客户端测试
1)修改客户端主机192.168.4.100的/etc/hosts文件,进行域名解析
vim /etc/hosts
192.168.4.5 www.aa.com www.bb.com
2)登录192.168.4.100客户端主机进行测试
firefox http://www.aa.com 输入密码后可以访问
firefox http://www.bb.com 直接访问
SSL虚拟主机
域名为www.cc.com
该站点通过https访问
通过私钥、证书对该站点所有数据加密
源码安装Nginx时必须使用--with-http_ssl_module参数,启用加密模块,对于需要进行SSL加密处理的站点添加ssl相关指令(设置网站需要的私钥和证书)。
步骤一:配置SSL虚拟主机
1)生成私钥与证书
cd /usr/local/nginx/conf
openssl genrsa > cert.key 生成私钥
openssl req -new -x509 -key cert.key > cert.pem 生成证书
2)修改Nginx配置文件,设置加密网站的虚拟主机
vim /usr/local/nginx/conf/nginx.conf
… …
server { 定义虚拟主机
listen 443 ssl; 开启SSL
server_name www.cc.com;
ssl_certificate cert.pem; 指定证书文件
ssl_certificate_key cert.key; 指定私钥文件
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
root html;
index index.html index.htm;
}
}
步骤二:客户端验证
1)修改客户端主机192.168.4.100的/etc/hosts文件,进行域名解析
vim /etc/hosts
192.168.4.5 www.cc.com www.aa.com www.bb.com
2)登录192.168.4.100客户端主机进行测试
firefox https://www.cc.com //信任证书后可以访问
Nginx反向代理
轮询(默认):逐一循环调度
Weight:指定循环几率,权重值和访问比率成正比
ip_hash:根据客户端ip分配固定的后端服务器
down:表示当前server暂停不参与负载
max_fails:允许请求失败的次数(默认为1)
fail_timeout:max_fails次失败后,暂停提供服务的时间
backup:备份服务器
后端做2台web服务器
Nginx采用轮询的方式调用后端Web服务器
两台Web服务器的权重要求设置为不同的值
最大失败次数为1,失败超时时间为30秒
例:使用4台RHEL7虚拟机,其中一台作为Nginx代理服务器,该服务器需要配置两块网卡,IP地址分别为192.168.4.5和192.168.2.5,两台Web服务器IP地址分别为192.168.2.100和192.168.2.200。客户端测试主机IP地址为192.168.4.100
步骤一:部署实施后端Web服务器
1)部署后端Web1服务器
后端Web服务器可以简单使用yum方式安装httpd实现Web服务,为了可以看出后端服务器的不同,可以将两台后端服务器的首页文档内容设置为不同的内容。
yum -y install httpd
echo "192.168.2.100" > /var/www/html/index.html
systemctl restart httpd
2)部署后端Web2服务器
yum -y install httpd
echo "192.168.2.200" > /var/www/html/index.html
systemctl restart httpd
步骤二:配置Nginx服务器,添加服务器池,实现反向代理功能
1)修改/usr/local/nginx/conf/nginx.conf配置文件
vim /usr/local/nginx/conf/nginx.conf
.. ..
http {
.. ..
upstream webserver { 定义员服务器组
server 192.168.2.100 weight=1 max_fails=2 fail_timeout=10;
server 192.168.2.200 weight=2 max_fails=2 fail_timeout=10;
}
.. ..
server {
listen 80;
server_name www.tarena.com;
location / {
proxy_pass http://webserver; 调用服务组
}
}
2)重启nginx服务
/usr/local/nginx/sbin/nginx –s reload
3)使用浏览器访问代理服务器测试轮询效果
curl http://192.168.4.5 //使用该命令多次访问查看效果
步骤二:配置upstream服务器集群池属性
1)设置失败次数,超时时间,权重
vim /usr/local/nginx/conf/nginx.conf
.. ..
http {
.. ..
upstream webserver {
server 192.168.2.100 weight=1 max_fails=2 fail_timeout=10;
server 192.168.2.200 weight=2 max_fails=2 fail_timeout=10;
}
.. ..
server {
listen 80;
server_name www.tarena.com;
location / {
proxy_pass http://webserver;
}
}
2)重启nginx服务
/usr/local/nginx/sbin/nginx –s reload
3)使用浏览器访问代理服务器测试轮询效果
curl http://192.168.4.5 //使用该命令多次访问查看效果
4)设置相同客户端访问相同Web服务器
vim /usr/local/nginx/conf/nginx.conf
.. ..
http {
.. ..
upstream webserver {
ip_hash;
server 192.168.2.100 weight=1 max_fails=2 fail_timeout=10;
server 192.168.2.200 weight=2 max_fails=2 fail_timeout=10;
}
.. ..
server {
listen 80;
server_name www.tarena.com;
location / {
proxy_pass http://webserver;
}
}
5)重启nginx服务
/usr/local/nginx/sbin/nginx –s reload
6)使用浏览器访问代理服务器测试轮询效果
curl http://192.168.4.5 使用该命令多次访问查看效果
Nginx优化主要从配置文件着手,常见优化参数如下:
worker_processes 与CPU核心数量一致
error_log 定义日志级别
worker_connections 每个worker最大并发连接数
server_tokens 服务器版本号信息
client_header_buffer_size 默认请求包头信息的缓存
large_client_header_buffers 大请求包头部信息的缓存个数与容量
error_page 404 自定义404错误页面
步骤一:构建Nginx服务器
1)源码安装Nginx软件
yum -y install gcc pcre-devel openssl-devel
useradd -s /sbin/nologin nginx
tar -zxvf nginx-1.8.0.tar.gz
cd nginx-1.8.0
./configure \
--prefix=/usr/local/nginx \ 指定安装路径
--user=nginx \ 指定用户
--group=nginx \ 指定组
--with-http_ssl_module 开启SSL加密功能
[[email protected] nginx-1.8.0]# make && make install 编译并安装
2)启用Nginx服务并查看监听端口状态
/usr/local/nginx/sbin/nginx
netstat -anptu | grep nginx
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 10441/nginx
步骤二:优化前从客户机访问Nginx服务器测试
1)使用ab高并发测试
格式:ab -c并发数 -n总请求数 URL
ab –n 2000 –c 2000 http://192.168.4.5/
Benchmarking 192.168.4.5 (be patient)
socket: Too many open files (24) 提示打开文件数量过多
2)使用脚本测试长头部请求是否能获得响应
cat buffer.sh
chmod +x buffer.sh
./ buffer.sh
.. ..
<center><h1>414 Request-URI Too Large</h1></center> 提示头部信息过大
3)客户端使用浏览器访问不存在的页面
firefox http://192.168.4.5/tt.html //访问不存在的页面
步骤三:优化Nginx服务器
1)修改Nginx配置文件
vim /usr/local/nginx/conf/nginx.conf
.. ..
worker_processes 2; 与CPU核心数量一致
events {
worker_connections 65535; 每个worker最大并发连接数
use epoll;
}
http {
open_file_cache max=2000 inactive=20s; 设置服务器最大缓存2000个文件句柄,关闭20秒内无请求
open_file_cache_valid 60s; 文件句柄有效时间是60秒,60秒后过期
open_file_cache_min_uses 5; 访问次数超过5次才被缓存
sendfile on; 提升Nginx读文件性能
tcp_nodelay on; 关闭TCP缓存延迟发送数据
keepalive_timeout 10; 保持连接的超时时间
server_tokens off; 不显示nginx版本号信息
client_header_buffer_size 1k; 默认请求包头信息的缓存
large_client_header_buffers 4 4k; 大请求包头部信息的缓存个数与容量
gzip on; 解压
gzip_min_length 1000; 1000字节以上解压
gzip_comp_level 4;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
server {
listen 80;
server_name www.tarena.com;
location / {
root html;
index index.html index.htm;
}
location ~ .(jpg|jpeg|gif|png|css|js|ico|xml)$ { ~匹配正则 不区分大小写
expires 30d; 定义客户端缓存时间为30天
}
error_page 404 /40x.html; 自定义错误页面
location = /40x.html {
root html;
}
}
}
2)修改Linux操作系统最大打开文件数
通过修改/etc/security/limits.conf文件修改打开文件最大数量:
vim /etc/security/limits.conf
- soft nofile 100000
- hard nofile 100000
ulimit –Hn 100000
ulimit –Sn 100000
3)提前生成404错误页面,供测试使用:
vim /usr/local/nginx/html/40x.html
<h1>~~^^^Error^^^~</h1>
原文地址:http://blog.51cto.com/13399294/2059239