14.Nginx搭建及优化
Nginx搭建及优化
目录
- Nginx搭建及优化
- Nginx服务基础
- Nginx服务配置文件
- nginx服务的主配置文件
Nginx服务基础
概述
- 一款高新能、轻量级Web服务软件
- 稳定性高
- 系统资源消耗低
- 对HTTP并发连接的处理能力高
- 单台物理服务器可支持30 000~50 000个并发请求。
Nginx和Apache的优缺点比较
nginx相对于apache的优点∶
- 轻量级,同样起web服务,比apache占用更少的内存及资源高并发,nginx处理请求是异步非阻塞的,而apache是阻塞型的在高并发下,nginx能保持低资源低消耗高性能高度模块化的设计。
- 编写模块相对简
apache相对于nginx的优点∶
- Rewrite比nginx的rewrite强大 模块多,基本想到的都可以找到少bug, nginx的bug相对较超稳定
存在的理由:一般来说,需要性能的web服务,用nginx。若不需要性能只求稳定,就选用apache。 Nginx处理动态请求是弱项,一般动态请求要Apache去做Nginx只适合处理静态网页或反向代理。
编译安装Nginx服务
1.关闭防火墙,将安装Nginx所需要的软件包传到任意目录
[root@localhost opt]# systemctl stop firewalld.service
[root@localhost opt]# systemctl disable firewalld.service
[root@localhost opt]# setenforce 0
2.安装相关依赖包
[root@localhost opt]# yum -y install pcre-devel zlib-devel gcc gcc-c++ make
3.创建运行用户和组一以便提供相应的库和头文件
[root@localhost opt]# useradd -M -s /sbin/nologin nginx
#不建立家目录不允许用户登录
4.压缩数据包并编译安装Nginx
[root@localhost opt]# tar -zxvf nginx-1.12.2.tar.gz #解压数据包
[root@localhost opt]# cd nginx-1.12.2/ #切换到安装包目录下
[root@localhost nginx-1.12.2]# ./configure \ #配置
> --prefix=/usr/local/nginx \ #暗转路径
> --user=nginx \ #指定用户名
> --group=nginx \ #指定组名
> --with-http_stub_status_module #启用此模块支持状态统计
[root@localhost nginx-1.12.2]# make -j2 && make install #编译并安装
5.做软链接让系统识别命令并启动nginx
[root@localhost nginx-1.12.2]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
6.检查、启动、重启、停止nginx服务
nginx -t #检查配置文件语法格式同样可以看到它的配置文件
nginx #启动nginx服务
kill -3 <PID号> #杀进程
添加Nginx系统服务
方法1:脚本控制服务
[root@localhost nginx-1.12.2]# cd /etc/init.d/
[root@localhost init.d]# vim nginx
方法2:将nginx命令加入服务
[root@localhost init.d]# cd /lib/systemd/system
[root@localhost system]# vim nginx.service
查看nginx版本信息
Nginx服务配置文件
nginx服务的主配置文件
/usr/local/nginx/conf/nginx.conf
配置文件分为一下块
- 全局块:全局配置。对全局生效
- events块:配置影响nginx服务器与用户的网络连接
- http块:配置代理,缓存,日志定义绝大多数功能和第三方模块的配置
- server块:配置虚拟主机的相关参数,一个http块可以有多个server块
- lication块:用于配置匹配的url
- upstream块:配置后端服务器具体地址,负载均衡配置不可或缺的部分
全局配置
#user nobody; #运行用户默认为nobody
worker_processes 1; #工作进程数量,一帮设置为和服务器cpu核数一样
#error_log logs/error.log; #错误日志文件的位置
#pid logs/nginx.pid; PID文件位置
I/O事件配置
events {
use epoll; #使用 epoll 模型以提高性能,2.6 以上版本建议使用
worker_connections 4096; #每个进程处理4096个连接
}
- 若工作进程数为 4,每个进程处理 4 096 个连接,则允许 Nginx 正常提供服务的连接数为(4*4096=16392),虽然说单台物理服务器可支持30 000~50 000个并发请求,但是具体还要看服务器硬件、网络带宽等物理条件的性 能表现,在生产环境中一般也就2-3万并发请求。
- 如提高每个进程的连接数还需执行"ulimit -n 65535"命令临时修改本地每个进程可以同时打开的最大文件数。
- 在Linux平台.上,在进行高并发TCP连接处理时,最高的并发数量都要受到系统对用户单一进程同时可打开文件数量的限制(这是因为系统为每个TCP连接都要创建一个socket句柄,每个socket句柄同时也是一个文件句柄)。
- 可使用ulimit -a命令查看系统允许当前用户进程打开的文件数限制。
- epoll(socket描述符)是Linux内核]为处理大批量文件描述符而作了改进的poll,是Linux下多路复用IO接口select/poll的增强版本,它能显著提高程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率
临时修改本地每个进程可以同时打开的最大文件数。
永久修改
[root@localhost ~]# vim /etc/security/limits.conf #编辑内核配置文件
HTTP配置
http {
include mime.types; #文件扩展名与文件类型映射表
default_type application/octet-stream; #默认文件类型
#日志格式设定
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" ' 7
'"$http_user_agent" "$http_x_forwarded_for"'; 8
#access_log logs/access.log main; #访问日志位置
sendfile on; #开启文件传输模式
#tcp_nopush on; #减少网络报文段的数量
#连接保持超时时间,单位是秒
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on; #gzip模块设置,设置是否开启gzip压缩输出
server {
listen 80; #监听地址及端口
server_name www.yxp.com; #站点域名,可以有多个,用空格隔开
#charset utf-8; #网页的默认字符集
#access_log logs/host.access.log main;
location / { #根目录配置
root html; #网站根目录的位置/usr/local/nginx/html
index index.html index.htm; #默认首页文件名
}
#error_page 404 /404.html;
redirect server error pages to the static page /50x.html
error_page 500 502 503 504 /50x.html; #内部错误的反馈页面
location = /50x.html { #错误页面配置
root html;
}
}
}
日志格式设定∶
$remote_addr与$http x forwarded for用以记录客户端的ip地址;
$remote user∶ 用来记录客户端用户名称;
$time local∶ 用来记录访问时间与时区;
$request∶用来记录请求的url与http协议;
$status∶ 用来记录请求状态;成功是200,
$body bytes sent ∶ 记录发送给客户端文件主体内容大小;
$http referer∶ 用来记录从哪个页面链接访问过来的;
$http user agent∶记录客户浏览器的相关信息;
通常web服务器放在反向代理的后面,这样就不能获取到客户的IP地址了,通过Sremote_add拿到的IP地址是反向代理服务器的iP地址。反向代理服务器在转发请求的http头信息中,可以增加x_forwarded_for信息,用以记录原有客户端的IP地址和原来客户端的请求的服务器地址。
location常见配置指令, root、alias、proxy_ pass
root(根路径配置)∶ 请求root /var/www/html
请求www.kgc.com/test/1.html,会返回文件/var/www/html/test/1.html
alias(别名配置):alias/var/www/html
请求www.kgc.com/test/1.html,会返回文件/var/www/html/1.html
proxy_pass(反向代理配置)
访问状态统计配置
- nginx 内置了 HTTP_STUB_STATUS 状态统计模块,用来反馈当前的 Web 访问情况, 配置编译参数时可添加--with-http_stub_status_module 来启用此模块支持,可以使用命令
/usr/local/sbin/nginx -v #查看已安装Nginx是否包含HTTP_STUB_STATUS模块
cat /opt/nginx-1.12.0/auto/options | grep YES #查看nginx已安装的所有模块
- 修改 nginx.conf 配置文件,指定访问位置并添加 stub_status 配置(建议修改之前备份,首次不备份可以系统已将原始文件备份)
[root@localhost conf]#vim /usr/local/nginx/conf/nginx.conf #编辑配置文件
[root@localhost conf]#systemctl restart nginx #重启服务
2.在网页中输入 192.168.239.10/status测试
Active connections: 1 #当前活动链接数
server accepts handled requests 1 1 1 #表示已经处理的连接信息,三个数字一次表示已处理的连接数、成功的TCP握手次数、已处理的请求数 Reading: 0 Writing: 1 Waiting: 1
可curl -Ls http://192.168.239.10/status 结合awk来写shell脚本,如果链接数过高报警
#!/bin/bash
a=`curl -Ls http://192.168.239.10/status | awk 'NR==1{print $3}'`
if [ $a -gt 30000 ]
then
echo "连接数过高已达 $a"
fi
基于授权的访问控制
1.生成用户密码认证文件
[root@localhost conf]# yum install -y httpd-tools #安装工具
[root@localhost conf]# htpasswd -c /usr/local/nginx/passwd.db geng #指定用户密码
[root@localhost conf]# htpasswd /usr/local/nginx/passwd.db wang #第二次则不需要-c选项 -c选项为创建文件
[root@localhost conf]#chown nginx /usr/local/nginx/passwd.db
[root@localhost conf]#chmod 400 /usr/local/nginx/passwd.db
2.修改主配置文件
[root@localhost conf]#vim /usr/local/nginx/conf/nginx.conf #编辑配置文件
3.重启服务范文测试
systemctl restart nginx
基于客户端的访问控制
- 基于客户端的访问控制简介 基于客户端的访问控制是通过客户端 IP 地址,决定是否允许对页面访问。Nginx 基于 客户端的访问控制要比 Apache 简单,规则如下: 1)deny IP/IP 段:拒绝某个 IP 或 IP 段的客户端访问。 2)allow IP/IP 段:允许某个 IP 或 IP 段的客户端访问。 3)规则从上往下执行,如匹配则停止,不再往下匹配。
1.修改配置文件
[root@localhost conf]#vim /usr/local/nginx/conf/nginx.conf #编辑配置文件
此时使用20终端网页浏览器访问可以看到访问被拒绝
在使用30进行访问可以看到可以登录
基于域名的Nginx虚拟主机
1.做ip与主机名的映射关系当然DNS域名解析也可以
[root@localhost nginx]# echo "192.168.239.10 www.kgc.com www.benet.com" >>/etc/hosts
2.为虚拟机整备网页文档
[root@localhost nginx]# mkdir -p /var/www/html/kgc
[root@localhost nginx]# mkdir -p /var/www/html/benet
[root@localhost nginx]# echo "<h1>www.kgc.com</h1>" > /var/www/html/kgc/index.html
[root@localhost nginx]# echo "<h1>www.benet.com</h1>" > /var/www/html/benet/index.html
3.修改nginx的配置文件配置两个server
[root@localhost conf]# vim nginx.conf #编辑配置文件
systemctl restart nginx.service #重启服务
4.此时网页访问
基于IP的nginx虚拟主机
1.添加临时IP地址
2.编辑配置文件
[root@localhost conf]# vim nginx.conf #编辑配置文件
3.此时网页访问
基于端口的nginx虚拟主机
1.修改配置文件
[root@localhost conf]# vim nginx.conf #编辑配置文件
systemctl restart nginx #重启服务
2.此时网页访问
14.Nginx搭建及优化的更多相关文章
- Ubuntu 14.10下基于Nginx搭建mp4/flv流媒体服务器(可随意拖动)并支持RTMP/HLS协议(含转码工具)
Ubuntu 14.10下基于Nginx搭建mp4/flv流媒体服务器(可随意拖动)并支持RTMP/HLS协议(含转码工具) 最近因为项目关系,收朋友之托,想制作秀场网站,但是因为之前一直没有涉及到这 ...
- Nginx 笔记(四)nginx 原理与优化参数配置 与 nginx 搭建高可用集群
个人博客网:https://wushaopei.github.io/ (你想要这里多有) 一.nginx 原理与优化参数配置 master-workers 的机制的好处 首先,对于每个 ...
- Ubuntu 14.04TLS Nginx搭建静态文件服务器
Nginx搭建静态文件服务器 [官方教程]https://www.nginx.com/resources/admin-guide/serving-static-content/ 打开Nginx的配置文 ...
- Linux实战教学笔记37:企业级Nginx Web服务优化实战(上)
一,Nginx基本安全优化 1.1 调整参数隐藏Nginx软件版本号信息 一般来说,软件的漏洞都和版本有关,这个很像汽车的缺陷,同一批次的要有问题就都有问题,别的批次可能就都是好的.因此,我们应尽量隐 ...
- Nginx搭建flv视频点播服务器
Nginx搭建flv视频点播服务器 前一段时间使用Nginx搭建的多媒体服务器只能在缓冲过的时间区域内拖放, 而不能拖放到未缓冲的地方. 这就带来了一个问题: 如果视频限速的速率很小, 那么客户端观看 ...
- Nginx搭建反向代理服务器
[大型网站技术实践]初级篇:借助Nginx搭建反向代理服务器 一.反向代理:Web服务器的“经纪人” 1.1 反向代理初印象 反向代理(Reverse Proxy)方式是指以代理服务器来接受int ...
- 关于Symfony2+nginx搭建过程总结
关于Symfony2+nginx搭建过程总结 最近在试着用nginx+symfony搭建公司的网站,由于nginx不支持pathinfo模式,所以必须修改nginx(我使用的是nginx1.5.1)的 ...
- centos7通过nginx搭建SSL
今天给大家带来的是一篇关于通过nginx搭建HTTPS访问转跳后端HTTP的教程,部署方式如下: 安装基础组件yum -y isntall firewalldyum -y install gcc gc ...
- 超详解的LNMP搭建并优化
环境为Centos7 nginx1.14 mysql5.7 php7一,安装Nginx (yum装,快速) yum install nginx二,优化nginx (方便后期工作,如果纯为测试的话,不用 ...
随机推荐
- Arrays工具类与Collections工具类
Arrays工具类 : Arrays.sort():对指定数组进行排序,从小到大 Arrays.toString():返回数组的内容的字符串表示形式 Arrays.asList():数组转List,但 ...
- Kubernetes探针原理详解
前言: 分布式系统和微服务体系结构的挑战之一是自动检测不正常的应用程序,并将请求(request)重新路由到其他可用系统,恢复损坏的组件.健康检查是应对该挑战的一种可靠方法.使用 Kubernetes ...
- XStream使用记录
XStream使用记录 官网 http://x-stream.github.io/index.html 下载地址 http://x-stream.github.io/download.html 参考资 ...
- mybatisPlus crud操作注意事项
1.调用IService里的update方法,如果是自定义根据除主键外其它字段更新的时候,如果给主键id设置其它值不会更新主键id,如果未设置主键id值或者设置为null,同样不会更新主键id. 2. ...
- STL空间分配器源码分析(一)
一.摘要 STL的空间分配器(allocator)定义于命名空间std内,主要为STL容器提供内存的分配和释放.对象的构造和析构的统一管理.空间分配器的实现细节,对于容器来说完全透明,容器不需关注内存 ...
- Vue基础开发入门之简单语法知识梳理(思维导图详解)
基于个人写的以下关于Vue框架基础学习的三篇随笔,在此基础上,做一个阶段性的知识总结,以此来检验自己对Vue这一段时间学习的成果,内容不多,但很值得一看.(思维导图详解)
- fs本地文件系统
node 中有一个内置模块,fs全称flie system 文件系统,可以对本地文件执行增删改查操作(以下为异步相关API) 先引入内置模块 var fs=require('fs') 1,增: w ...
- delaycall.js 修改表单延迟自动提交的 jQuery / Zepto 插件
delaycall.js delaycall 是一个 jQuery / Zepto 插件,用于在用户完成某项操作后,延迟指定秒数后自动调动指定函数.如用户输入完内容后,延迟1秒,自动提交表单. Git ...
- python的一些练习题
1.目前工作上有一堆的ip地址,ip是ok的,但是需要找出来不在这里面的其他ip import os a = list() with open('ip.txt','r') as f: #print(f ...
- k8s入门之ConfigMap(九)
ConfigMap是k8s的配置管理工具,通常用来保存明文的配置信息,以key-value形式传递配置. 一.使用命令创建ConfigMap对象 1.通过--from-literal参数创建 kube ...