nginx服务器及优化

简介:

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,如需转载请自行联系原作者




相关实践学习
基于函数计算快速搭建Hexo博客系统
本场景介绍如何使用阿里云函数计算服务命令行工具快速搭建一个Hexo博客。
相关文章
|
16天前
|
弹性计算 监控 开发工具
【阿里云弹性计算】阿里云ECS的网络优化实践:VPC配置与网络性能提升
【5月更文挑战第29天】阿里云ECS通过虚拟私有云(VPC)提供高性能、安全的网络环境。VPC允许用户自定义IP地址、路由规则和安全组。配置包括:创建VPC和交换机,设定安全组,然后创建ECS实例并绑定。优化网络性能涉及规划网络拓扑、优化路由、启用网络加速功能(如ENI和EIP)及监控网络性能。示例代码展示了使用Python SDK创建VPC和交换机的过程。
176 3
|
25天前
|
数据采集 缓存 Java
代理服务器调试技巧:优化Kotlin网络爬虫的数据抓取过程
代理服务器调试技巧:优化Kotlin网络爬虫的数据抓取过程
|
29天前
|
监控 Unix 应用服务中间件
Android-音视频学习系列-(八)基于-Nginx-搭建(rtmp、http)直播服务器
Android-音视频学习系列-(八)基于-Nginx-搭建(rtmp、http)直播服务器
|
7天前
|
NoSQL 关系型数据库 应用服务中间件
jdk1.8、mysql、redis、nginx centos云服务器安装配置
jdk1.8、mysql、redis、nginx centos云服务器安装配置
|
20天前
|
存储 弹性计算 人工智能
【阿里云弹性计算】AI 训练与推理在阿里云 ECS 上的高效部署与优化
【5月更文挑战第25天】阿里云ECS为AI训练和推理提供弹性、可扩展的计算资源,确保高性能和稳定性。通过灵活配置实例类型、利用存储服务管理数据,以及优化模型和代码,用户能实现高效部署和优化。自动伸缩、任务调度和成本控制等策略进一步提升效率。随着AI技术发展,阿里云ECS将持续助力科研和企业创新,驱动人工智能新时代。
51 0
|
24天前
|
存储 弹性计算 监控
【阿里云弹性计算】成本优化实战:利用阿里云 ECS 抢占式实例节省云支出
【5月更文挑战第21天】阿里云ECS的抢占式实例提供了一种成本优化策略,适合对中断容忍度较高的业务。通过创建和管理抢占式实例,结合API查询价格信息,企业能节省大量成本。使用时注意业务容错性,设置监控系统应对中断,结合其他成本优化措施,如存储类型选择和网络配置优化。确保业务可恢复性,关注阿里云政策,并根据业务变化调整策略,以实现成本与效益的最佳平衡。
64 3
|
29天前
|
应用服务中间件 网络安全 Apache
构建高性能Web服务器:Nginx vs Apache
【5月更文挑战第16天】Nginx与Apache是两种主流Web服务器,各具优势。Nginx以其轻量级、高并发处理能力和反向代理功能见长,适合大型网站和高并发场景;而Apache以功能丰富、稳定性强闻名,适合企业网站和需要多种Web服务功能的场景。在性能上,Nginx处理高并发更优,Apache则可能在高负载时遭遇瓶颈。在选择时,应根据实际需求权衡。
|
30天前
|
存储 弹性计算 监控
探索阿里云弹性计算:如何优化云服务器ECS的性能与成本
在云时代,【阿里云ECS】的性能优化与成本控制至关重要。利用实例规格选择、自动伸缩、网络和存储配置,可增强性能、减少成本。结合监控工具和优化建议,用户能解决性能问题,提升应用稳定性,实现高效且经济的云计算运营。
70 1
|
30天前
|
缓存 安全 网络安全
Apache服务器配置与优化指南
【5月更文挑战第7天】Apache服务器配置与优化指南包括基础配置和性能优化。安装Apache后,编辑`httpd.conf`配置文件,设置`ServerRoot`、`Listen`、`ServerName`和`DocumentRoot`。启用虚拟主机以托管多个网站。性能优化涉及启用MPM模块(如worker或event),启用压缩功能,优化KeepAlive参数,配置缓存和限制并发连接数。安全配置包括禁用不必要的模块,设置目录权限,启用SSL/TLS及限制IP访问。通过这些措施,提升服务器性能和安全性。
|
30天前
|
缓存 负载均衡 安全
深入探索Nginx高性能Web服务器配置与优化
【5月更文挑战第7天】本文深入探讨了Nginx的配置与优化,重点介绍了基础配置参数如`worker_processes`、`worker_connections`和`keepalive_timeout`,以及优化策略,包括使用epoll事件驱动模型、开启gzip压缩、启用缓存、负载均衡和安全配置。此外,还提到了性能调优工具,如ab、nginx-stats和nmon,以助于提升Nginx的性能和稳定性。