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. linux find命令 -mtime参数 根据修改时间查找文件

    命令:find 搜索路径 -mtime n 主要说明n的含义: 例: n=5 "5"指的是前 5~6 天那一天修改的文件 n=-5 "-5"指的是 5 天内修改 ...

  2. Educational Codeforces Round 119 (Div. 2), (C) BA-String硬着头皮做, 能做出来的

    题目链接 Problem - C - Codeforces 题目 Example input 3 2 4 3 a* 4 1 3 a**a 6 3 20 **a*** output abb abba b ...

  3. 解构华为云HE2E项目中的容器技术应用

    摘要:本文从容器技术应用的角度解构了HE2E项目的代码仓库配置.镜像构建.及docker-compose的部署方式.希望通过本篇文章分享可以使更多的开发者了解容器技术和华为云. 本文分享自华为云社区& ...

  4. Java语言学习day39--8月14日

    今日内容介绍1.Map接口2.模拟斗地主洗牌发牌 ###01Map集合概述 A:Map集合概述: 我们通过查看Map接口描述,发现Map接口下的集合与Collection接口下的集合,它们存储数据的形 ...

  5. kubeadm 搭建 K8s

    kubeadm 搭建 K8s 本篇主要记录一下 使用 kubeadm 搭建 k8s 详细过程 ,环境使用 VirtualBox 构建的3台虚拟机 1.环境准备 操作系统:Centos7 (CentOS ...

  6. 1. charles安装配置与抓包详解

    Charles简介Charles是一个HTTP代理服务器,HTTP监视器,反转代理服务器,当浏览器连接Charles的代理访问互联网时,Charles可以监控浏览器发送和接收的所有数据.它允许一个开发 ...

  7. FATAL: using recovery command file "recovery.conf" is not supported

    PostgreSQL12 附录 E. 版本说明 将recovery.conf设置移动到postgresql.conf中. (Masao Fujii, Simon Riggs, Abhijit Meno ...

  8. 新华三Gen10服务器ilo5中刷新bios固件

    新华三Gen10服务器ilo5中刷新bios固件. 当前bios1.42 已经是最新了. 固件下载后解压缩. 选择刷新固件. 点击浏览.flash文件. 点击flash 点击ok确认 开始上传 刷新进 ...

  9. 《HelloGitHub》第 73 期

    兴趣是最好的老师,HelloGitHub 让你对编程感兴趣! 简介 HelloGitHub 分享 GitHub 上有趣.入门级的开源项目. https://github.com/521xueweiha ...

  10. [题解] 51 nod 1340 地铁环线

    不难看出这是一道差分约束的题目. 但是如果想按照通常的题目那样去建边的话,就会发现这句话--相邻两站的距离至少是1公里--建边后就直接让整个题出现了负环(默认是按求最短路建边),没法做了. 这时我们就 ...