nginx服务器及优化

  1. 云栖社区>
  2. 博客>
  3. 正文

nginx服务器及优化

技术小胖子 2017-11-15 13:21:00 浏览1180
展开阅读全文

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加密功能
[root@svr5 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>

防盗链语句
location ~*.(gif/jpg/png/swf/flv)${
valid_referers none blocked www.baidu.com;
if($invalid_referer) {
rewrite ^/ http://www.baidu.com/40x.html;

}


     本文转自夜流璃雨 51CTO博客,原文链接:http://blog.51cto.com/13399294/2059239,如需转载请自行联系原作者




网友评论

登录后评论
0/500
评论
技术小胖子
+ 关注