Nginx详解和安装
目录
Nginx
Nginx介绍
Nginx官网
nginx基本架构
nginx功能特性
基本功能
隐藏nginx服务器版本号
上传nginx软件包并解压
安装nginx依赖包
预编译
编译安装
启动nginx
测试
配置文件nginx.conf
修改nginx运行账号
查看nginx当前运行账号
修改nginx运行账号
添加path变量
重载nginx
生成服务启动脚本
配置服务开机自启
Nginx
Nginx介绍
Nginx ("engine x") 是一个轻量级、高性能的WEB服务器软件和反向代理服务器。
Nginx以事件驱动(epoll)的方式编写,所以有非常好的性能,同时也是一个非常高效的反向代理、负载平衡。但是Nginx并不支持cgi方式运行,原因是可以减少因此带来的一些程序上的漏洞。所以必须使用FastCGI方式来执行PHP程序。
1、WEB服务器:这是应用比较多的场景,配置虚拟主机提供HTTP WEB服务。可以先通过动态/静态内容分离,而后为静态内容(html/css/js/图片等)提供HTTP访问功能;而动态内容可以整合代理模块,代理给上游服务器,来支持对外部程序的直接调用或者解析,如FastCGI支持PHP。
2、反向代理服务器:这是应用非常多的场景,为后端服务器代理。接收客户端请求,根据负载均衡策略转发给后端多个上游服务器处理;然后再等待后端服务器返回请求响应,接收到后再返回给请求的客户端。
Nginx官网
Nginx官网:http://nginx.org
Nginx官方文档:http://nginx.org/en/docs/
选择自己需要的版本
nginx基本架构
1、一个master进程生成多个worker子进程(每个进程只有一个线程),一个worker响应多个用户请求;
2、非阻塞、IO复用、事件驱动:select,poll, epoll, kqueue,/dev/poll;
3、支持sendfile,sendfile64;
4、支持文件AIO(异步I/O);
5、支持mmap;
6、灵活的文件配置;
7、占用内存小:10,000个非活动HTTP保持连接占用大约2.5M内存。
nginx功能特性
基本功能
实现与服务静态文件(静态资源的web服务器),能缓存打开的文件描述符;
反向代理服务器,缓存、负载均衡、健康状态检测;
支持FastCGI;
模块化机制,非DSO机制,支持多种过滤器gzip,SSI和图像的模块完成图形大小调整等;
支持SSL;
扩展功能
基于名称和IP做虚拟主机;
支持keeplive;
支持平滑配置更新或程序版本升级;
定制访问日志,支持使用日志缓存以提高性能;
支持URL rewrite;
支持路径别名;
支持基于IP及用户的认证;
支持速率限制,并发数限制等;
隐藏nginx服务器版本号
上传nginx软件包并解压
tar -zxvf nginx-1.10.3.tar.gz -C /usr/local/src/
Vi /usr/local/src/nginx-1.10.3/src/core/nginx.h
修改版本号为9.9.9 修改服务器名称
vi src/http/ngx_http_header_filter_module.c
修改HTTP头信息中的server字段,防止回显具体版本号
vi src/http/ngx_http_special_response.c
这个文件定义了http错误码的返回,有时候我们页面程序出现错误,Nginx会代我们返回相应的错误代码,回显的时候,会带上nginx和版本号,我们把它隐藏起来。
安装nginx依赖包
[root@wzy]# yum install -y gcc gcc-c++ autoconf automake zlib zlib-devel openssl openssl-devel pcre pcre-devel
预编译
创建nginx运行账户www并加入到www组,不允许www用户直接登录系统。
[root@wzy]# groupadd www #添加用户组
[root@wzy]# useradd -g www www -s /sbin/nologin #添加用户到用户组,不登录系统
[root@wzy nginx-1.10.3]# ./configure --prefix=/usr/local/nginx --with-http_dav_module --with-http_stub_status_module --with-http_addition_module --with-http_sub_module --with-http_flv_module --with-http_mp4_module --with-pcre --with-http_ssl_module --with-http_gzip_static_module --user=www --group=www
相关选项说明
with-http_dav_module # nginx 编译时通过加入“--with-http_dav_module”可以启用对WebDav协议的支持。该模块处理 HTTP 和 WebDAV 的 PUT、DELETE、MKCOL、COPY 和 MOVE 方法。
--with-http_stub_status_module #获取Nginx的状态统计信息
--with-http_addition_module #向响应内容中追加内容,比如想在站点底部追加一个js或者css,可以使用这个模块来实现,即模块ngx_http_addition_module在响应之前或者之后追加文本内容。
--with-http_sub_module # ngx_http_sub_module模块是一个过滤器,它修改网站响应内容中的字符串,比如你想把响应内容中的‘iuwai’全部替换成‘aaaaa‘,这个模块已经内置在nginx中,但是默认未安装,需要安装需要加上配置参数:--with-http_sub_module
--with-http_flv_module #该ngx_http_flv_module模块为Flash视频(FLV)文件提供伪流服务器端支持。它会根据指定的 start 参数来指定跳过多少字节,并在返回数据前面附上 FLV 头。
--with-http_mp4_module #模块提供了对 MP4 视频的播放支持,相关的扩展名 .mp4 .m4v .m4a。
--with-http_ssl_module #启用ngx_http_ssl_module
--with-pcre # 支持正则表达式
编译安装
[root@wzy nginx-1.10.3]# make && make install
启动nginx
[root@wzy nginx-1.10.3]# /usr/local/nginx/sbin/nginx
查看端口号
测试
[root@wzy nginx-1.10.3]# curl -I 192.168.10.4
网站测试
http://192.168.10.4/
配置文件nginx.conf
在Nginx服务器的主配置文件nginx.conf中,包括全局配置、I/O事件配置、HTTP配置这三大块内容,配置语句的格式为”关键字 值;”(末尾以分号表示结束),以”#”开始的部分表示注释。
1)全局配置
由各种配置语句组成,不使用特定的界定标记。全局配置部分包括运行用户、工作进程数、错误日志、PID存放位置等基本设置。
常用配置项:
user nobody;
//运行用户,Nginx的运行用户实际是编译时指定的nginx,若编译时未指定则默认为nobody
worker_processes 2;
//指定nginx启动的工作进程数量,建议按照cpu数目来指定,一般为它的倍数
worker_rlimit_nofile 102400;
//这个指令是指当一个nginx进程打开的最多文件数目,理论值应该是最多打开文件数(ulimit -n)与nginx进程数相除,但是nginx分配请求并不是那么均匀,所以最好与ulimit -n的值保持一致。(通过”ulimit –n 数值”可以修改打开的最多文件数目)
error_log logs/error.log; //全局错误日志文件的位置
pid logs/nginx.pid; //PID文件的位置
2)I/O事件配置:
使用”events {}”界定标记,用来指定Nginx进程的I/O响应模型,每个进程的连接数等设置
events {
use epoll; //使用epoll模型,对于2.6以上的内核,建议使用epoll模型以提高性能
worker_connections 4096; //每个进程允许的最多连接数(默认为1024),每个进程的连接数应根据实际需要来定,一般在10000以下,理论上每台nginx服务器的最大连接数为worker_processes*worker_connections,具体还要看服务器的硬件、带宽等。
}
3)HTTP配置
使用”http{}”界定标记,包括访问日志、HTTP端口、网页目录、默认字符集、连接保持、以及虚拟主机、PHP解析等一系列设置。其中大部分配置语句包含在子界定标记”server {}”内。
http {
#设定媒体类型,include 只是一个在当前文件中包含另一个文件内容的指令。
include mime.types;
default_type application/octet-stream; //默认媒体类型足够。
#设定日志格式
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
#设定access log
access_log logs/access.log main;
keepalive_timeout 65; //连接保持超时
#设定虚拟主机
server { //用来配置虚拟主机
listen 80; //WEB服务的监听设置,可以采用”IP地址:端口”形式
server_name www.lnmp.com;//网站名,称可以写多个名称,用空格分隔
location / { //表示如何匹配后面的路径的
index index.html; //默认首页
root html; //网页根目录位置,默认为Nginx安装目录下的html/子目录,root语句用来设置特定访问位置的网页文档路径,根据需要可改为/var/www/html等其他路径。
}
charset gb2312; //网页的默认字符集
#设定本虚拟主机的访问日志
access_log logs/www.lnmp.com.access.log main;
error_page 500 502 503 504 /50x.html; //内部错误的反馈页面
location = /50x.html {
root html;
}
}
}
修改nginx运行账号
查看nginx当前运行账号
[root@wzy ~]# ps -aux | grep nginx #默认是nobody用户
修改nginx运行账号
[root@wzy ~]# vim /usr/local/nginx/conf/nginx.conf
查看运行账号
[root@wzy ~]# ps -aux | grep nginx
在这里我们还可以看到在查看的时候,worker进程是www用户了,但是master进程还是root
其中,master是监控进程,也叫主进程,worker是工作进程.
master监控进程使用root,也可以是降级使用普通用户,如果都是用普用户,那么编译安装的时候,是用普通用户执行,sudo方式操作,可以直接理解为master是管理员,worker进程才是为用户提供服务的!
添加path变量
[root@wzy11 ~]# ln -s /usr/local/nginx/sbin/* /usr/local/bin/
重载nginx
使用nginx -h 查看nginx选项信息
[root@wzy ~]# nginx -t #语法检测
[root@wzy ~]# nginx -s reload # 重载nginx
重载nginx其他选项
[root@wzy ~]# nginx -v 显示版本号和服务器名称,隐藏则显示隐藏名称
[root@wzy ~]# nginx -V(大写) 显示版本号、服务器名称、编译时使用的模块信息
生成服务启动脚本
[root@wzy ~]# vi /etc/init.d/nginx
#!/bin/bash# chkconfig: 2345 99 20# description: Nginx Service Control ScriptPROG="/usr/local/nginx/sbin/nginx"PIDF="/usr/local/nginx/logs/nginx.pid"case "$1" instart)netstat -anplt |grep ":80" &> /dev/null && pgrep "nginx" &> /dev/nullif [ $? -eq 0 ]thenecho "Nginx service already running."else$PROG -t &> /dev/nullif [ $? -eq 0 ] ; then$PROGecho "Nginx service start success."else$PROG -tfifi;;stop)netstat -anplt |grep ":80" &> /dev/null && pgrep "nginx" &> /dev/nullif [ $? -eq 0 ]thenkill -s QUIT $(cat $PIDF)echo "Nginx service stop success."elseecho "Nginx service already stop"fi;;restart)$0 stop$0 start;;status)netstat -anplt |grep ":80" &> /dev/null && pgrep "nginx" &> /dev/nullif [ $? -eq 0 ]thenecho "Nginx service is running."elseecho "Nginx is stop."fi;;reload)netstat -anplt |grep ":80" &> /dev/null && pgrep "nginx" &> /dev/nullif [ $? -eq 0 ]then$PROG -t &> /dev/nullif [ $? -eq 0 ] ; thenkill -s HUP $(cat $PIDF)echo "reload Nginx config success."else$PROG -tfielseecho "Nginx service is not run."fi;;*)echo "Usage: $0 {start|stop|restart|reload}"exit 1esac
配置服务开机自启
[root@wzy ~]# chmod +x /etc/init.d/nginx #给脚本添加可执行权限
[root@ wzy ~]# chkconfig --add nginx #把nginx添加为系统服务
[root@wzy ~]# chkconfig nginx on #把nginx添加开机自启动
[root@wzy ~]# chkconfig --list nginx #查看nginx开机启动项
Nginx详解和安装相关推荐
- Nginx详解一(理论)
一.前言 二.Web服务器提供服务的方式 三.多进程.多线程.异步模式的对比 四.Web服务请求过程 五.Linux I/O模型 六.Linux I/O模型具体说明 七.Linux I/O模型的具体实 ...
- Git客户端图文详解如何安装配置GitHub操作流程攻略
Git客户端图文详解如何安装配置GitHub操作流程攻略 软件应用 爱分享 3个月前 (08-15) 8896浏览 0评论 Git介绍 分布式 : Git版本控制系统是一个分布式的系统, 是用来 ...
- python如何安装matplotlib_详解python安装matplotlib库三种失败情况
(可能只有最后一句命令有用,可能全篇都没用) (小白方法,可能只适用于本人情况) 安装matplotlib时,出现的三种失败情况 1.read timed out 一开始我在pycharm终端使用pi ...
- 第二篇supervisor集群管理工具cesi安装详解-如何安装supervisor-cesiwebUI
第二篇supervisor集群管理工具cesi安装详解-如何安装supervisor-cesiwebUI 介绍 安装 解压 安装依赖 修改配置 注册为系统服务 启动 登录一下,发现报错了 解决方法 介 ...
- 第一篇supervisor集群管理工具cesi安装详解-如何安装supervisor
第一篇supervisor集群管理工具cesi安装详解-如何安装supervisor 环境 准备 安装python3.7.4 问题 解决方法 安装supervisor 配置supervisor服务 启 ...
- 详解VMware12安装Mac OS X 10.11
有不懂的地方可以留言,知道哪里错的必会回答 文章来源:https://www.jb51.net/article/105034.htm 系统文件来源:https://zhidao.baidu.com/q ...
- 即兴操作:详解Linux安装GCC方法-------------------------这操作很简单搞一波试试看
详解Linux安装GCC方法 起锅烧油先准备七个包配置文件以便于查看 上传http-2.4.25.tar.gz软件包到/opt目录下 解压压缩包 修改配置文件 修改配置文件并启动服务 inux中访问h ...
- Android Studio 安装详解及安装过程中出现的问题解决方案
Android Studio 安装详解及安装过程中出现的问题解决方案 一,Android Studio安装包下载, 首先到官网下载,就是去Android Studio中文社区官网下载你的平台需要的安装 ...
- IDEA安装阿里巴巴编码规范插件的两种方式详解(在线安装和离线安装)
这篇文章主要介绍了IDEA安装阿里巴巴编码规范插件的两种方式详解(在线安装和离线安装),本文通过截图给大家展示的非常详细,需要的朋友可以参考下 目录 1.在线安装: 2.离线安装: IDEA安装阿里巴 ...
最新文章
- 依赖注入框架Autofac学习笔记
- Android一个完整的项目转成SDK提供给第三方嵌入
- 摘抄《天龙八部》诗词回目
- Solr建立索引时,过滤HTML标签
- JavaFX仿windows文件管理器目录树
- shell技巧(sed 断句、读取指定行) 【ZT】
- matlab非线性系统频域标识,基于MATLAB的最小二乘法系统辨识与仿真
- Style主题Theme风格Android
- 万兆交换机用什么网线_超五类线到底是百兆线还是千兆线?家庭环境中我们要选择几类网线?...
- EXT.NET高效开发(二)——封装函数
- sql server代理无法启动_DungProxy代理资源服务系统,
- iOS 使用脚本自动化复制target
- 第一篇:手把手教你移植任天堂,没有声音、无需外置SD卡、可使用独立按键也可使用外置手柄,本人使用的芯片为ESP32,移植到STM32均可使用。(本篇主要介绍nes_main.h这个文件)
- unity导入Standard Assets出现错误
- 智遥工作流中调用SAP基础数据
- Linux环境下配置虚拟ip,方法2:单网卡绑定多IP
- linux 将新密码邮件发送,linux脚本实现自动发送和收取邮件的设置方法
- 性能优化之cpu的 us和sy
- 工业工程运用计算机,工业工程如何面对挑战-精选.doc
- 恢复时间目标(RTO)和恢复点目标(RPO)的差异
热门文章
- 多多客api_多多客小程序如何配置微信开放平台?
- 2014安康电大会计本科网考计算机应用基础试题答案,2014年电大网考计算机应用基础统考试题二及答案小抄[精品].doc...
- 高考将至,听听那些关于高考的经典段子吧
- 第一次使用Xshell在服务器上跑程序
- CSVreader和POI操作用法比较,以及CSVReader的坑
- MATLAB | 一起来绘制有雪花飘落的圣诞树叭
- Yonsuite的云服务能力!
- perfmon android 7.1,PerfMon+性能监视器
- java 子类化_如何在Java中安全地进行子类型化
- [openjudge] Ride to Office