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. LC-283

    题目链接:https://leetcode-cn.com/problems/move-zeroes/ 首先想到了快排(简易思想),0为中间点, 把不等于0(注意题目没说不能有负数)的放到中间点的左边, ...

  2. [源码解析] TensorFlow 分布式 DistributedStrategy 之基础篇

    [源码解析] TensorFlow 分布式 DistributedStrategy 之基础篇 目录 [源码解析] TensorFlow 分布式 DistributedStrategy 之基础篇 1. ...

  3. Jx.Cms开发笔记(一)-Jx.Cms介绍

    开始 从今天开始,我们将开启Jx.Cms系列开发教程. 我们将会使用Jx.Cms来介绍Blazor的开发.MVC的开发,热插拔插件的开发等等一系列开发教程. 介绍 Jx.Cms是一个使用最新版.NET ...

  4. 2021.11.04 P1392 取数(多路归并)

    2021.11.04 P1392 取数(多路归并) P1392 取数 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题意: 在一个n行m列的数阵中,你须在每一行取一个数(共n个数) ...

  5. Maven中央仓库地址大全

    1.默认的Maven中央仓库  在Maven安装目录下,找到:/lib/maven-model-builder-${version}.jar 打开该文件,能找到超级POM:\org\apache\ma ...

  6. 记一次Linux Centos7病毒清理

    记一次在工作中测试环境下中病毒的处理解决办法,都说linux系统非常安全,但是很多人百年一遇的病毒被我遇上了,公司三台测试环境服务器中招. 最开始系统突然变得很卡,使用top命令查看资源占用情况,发现 ...

  7. FileNotFoundError: [Errno 2] No such file or directory: 'image/1.jpg'问题解决

    FileNotFoundError: [Errno 2] No such file or directory: 'image/1.jpg'问题 最近在学习爬虫,想爬一些图片并保存到本地,但是在下载图片 ...

  8. 团队Beta2

    队名:观光队 链接 组长博客 作业博客 组员实践情况 王耀鑫 **过去两天完成了哪些任务 ** 文字/口头描述 学习 展示GitHub当日代码/文档签入记录 接下来的计划 完成短租车,页面美化 **还 ...

  9. 不再空谈AI,从打造一台智能无人机开始

    对于大多数无人机爱好者来说,能自己从头开始组装一台无人机,之后加入AI算法,能够航拍,可以目标跟踪,是心中的梦想. 并且,亲自从零开始完成复杂系统,这是掌握核心技术的必经之路. 开课吧特邀北京航空航天 ...

  10. 使用grabit分析mysql数据库中的数据血缘关系

    使用grabit分析mysql数据库中的数据血缘关系 Grabit 是一个辅助工具,用于从数据库.GitHub 等修订系统.bitbucket 和文件系统等各种来源收集 SQL 脚本和存储过程,然后将 ...