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已安装的所有模块
  1. 修改 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.此时网页访问

http://www.kgc.com

http://www.benet.com

基于IP的nginx虚拟主机

1.添加临时IP地址

2.编辑配置文件

[root@localhost conf]# vim nginx.conf      #编辑配置文件

3.此时网页访问

http://192.168.239.10

http://192.168.239.15

基于端口的nginx虚拟主机

1.修改配置文件

[root@localhost conf]# vim nginx.conf      #编辑配置文件

 systemctl restart nginx   #重启服务

2.此时网页访问

http://192.168.239.10:666

http://192.168.239.10:888

14.Nginx搭建及优化的更多相关文章

  1. Ubuntu 14.10下基于Nginx搭建mp4/flv流媒体服务器(可随意拖动)并支持RTMP/HLS协议(含转码工具)

    Ubuntu 14.10下基于Nginx搭建mp4/flv流媒体服务器(可随意拖动)并支持RTMP/HLS协议(含转码工具) 最近因为项目关系,收朋友之托,想制作秀场网站,但是因为之前一直没有涉及到这 ...

  2. Nginx 笔记(四)nginx 原理与优化参数配置 与 nginx 搭建高可用集群

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) 一.nginx 原理与优化参数配置 ​ ​ master-workers 的机制的好处 首先,对于每个 ...

  3. Ubuntu 14.04TLS Nginx搭建静态文件服务器

    Nginx搭建静态文件服务器 [官方教程]https://www.nginx.com/resources/admin-guide/serving-static-content/ 打开Nginx的配置文 ...

  4. Linux实战教学笔记37:企业级Nginx Web服务优化实战(上)

    一,Nginx基本安全优化 1.1 调整参数隐藏Nginx软件版本号信息 一般来说,软件的漏洞都和版本有关,这个很像汽车的缺陷,同一批次的要有问题就都有问题,别的批次可能就都是好的.因此,我们应尽量隐 ...

  5. Nginx搭建flv视频点播服务器

    Nginx搭建flv视频点播服务器 前一段时间使用Nginx搭建的多媒体服务器只能在缓冲过的时间区域内拖放, 而不能拖放到未缓冲的地方. 这就带来了一个问题: 如果视频限速的速率很小, 那么客户端观看 ...

  6. Nginx搭建反向代理服务器

    [大型网站技术实践]初级篇:借助Nginx搭建反向代理服务器   一.反向代理:Web服务器的“经纪人” 1.1 反向代理初印象 反向代理(Reverse Proxy)方式是指以代理服务器来接受int ...

  7. 关于Symfony2+nginx搭建过程总结

    关于Symfony2+nginx搭建过程总结 最近在试着用nginx+symfony搭建公司的网站,由于nginx不支持pathinfo模式,所以必须修改nginx(我使用的是nginx1.5.1)的 ...

  8. centos7通过nginx搭建SSL

    今天给大家带来的是一篇关于通过nginx搭建HTTPS访问转跳后端HTTP的教程,部署方式如下: 安装基础组件yum -y isntall firewalldyum -y install gcc gc ...

  9. 超详解的LNMP搭建并优化

    环境为Centos7 nginx1.14 mysql5.7 php7一,安装Nginx (yum装,快速) yum install nginx二,优化nginx (方便后期工作,如果纯为测试的话,不用 ...

随机推荐

  1. springboot集成spring security实现登录和注销

    文章目录 一.导入坐标 二.Users实体类及其数据库表的创建 三.controller,service,mapper层的实现 四.核心–编写配置文件 五.页面的实现 运行结果 一.导入坐标 < ...

  2. window.history.go(-1);后退不刷新问题 移动端

    在后退的界面上添加 判断是否是返回window.addEventListener('pageshow', function (e) {    if(e.persisted || (window.per ...

  3. 安装mysql ndb cluster二进制版本在linux上

    Installing an NDB Cluster Binary Release on Linux (官方安装手册)手册地址:https://dev.mysql.com/doc/refman/5.7/ ...

  4. AgileConfig 1.6.0 发布 - 支持服务注册与发现

    大家好,好久没有输出博文了,一是因为比较忙,另外一个原因是最近主要的精力是在给 AgileConfig 添加一个新的功能:服务注册与发现. 先说说为什么会添加这个功能.我自己的项目是用 Consul ...

  5. Java学习day27

    今天跟着做了一个模拟龟兔赛跑的程序 只有一条赛道,乌龟和兔子在同一条赛道上比赛,使用了多线程 为了实现兔子睡觉,在run方法内增加了当前奔跑者是否是兔子的判断且当前奔跑步数是否是10的整数倍的判断,如 ...

  6. OpenHarmony 3.1 Beta版本关键特性解析——探秘隐式查询

    ​(以下内容来自开发者分享,不代表 OpenHarmony 项目群工作委员会观点)​ 徐浩 隐式查询是 OpenAtom OpenHarmony(以下简称"OpenHarmony" ...

  7. 3.SRE.操作手册:基础篇

    SRE的根基起码应该包括:SLO.监控.告警.减少琐事和简单化. SLO(服务质量目标):用于描述服务可靠性的程度. SRE的职责并不只是将"所有工作"都自动化,并保持" ...

  8. Java语言学习day14--7月19日

    ###10数组逆序功能实现 * A:案例代码 /* 数组的逆序: 数组中的元素,进行位置上的交换 逆序 不等于 反向遍历 就是数组中最远的两个索引,进行位置交换,实现数组的逆序 使用的是数组的指针思想 ...

  9. docker入门_docker安装

    docker入门_docker安装 ubuntu 安装 curl -sSL https://get.daocloud.io/docker | sh # 官方安装脚本自动安装 systemctl ena ...

  10. Vim 中进行文本替换

    Vim 中进行文本替换 格式 用法 :[range]s/from/to/[flags] tips: [] 表示该内容可选 参数 from 需要替换的字符串(可以是正则表达式) to 替换后的字符串 r ...