nginx编译简单安装和优化(一)

2023年 7月 15日 77.5k 0

nginx编译简单安装
前提:
安装开发环境
yum groupinstall “Deveopment Tools” “Server Platform Developent”
另外,在安装nginx时,可能额外依赖pcre-devel,来实现扩展表达式,扩展URL重写,它不会自动安装
yum -y install pcre-devel
1,下载nginx包,加压
[root@www ~]# tar xf nginx-1.6.2.tar.gz
[root@www ~]# cd nginx-1.6.2
在之前的文档中没有细说编辑安装选项,这次将会简单介绍
--prefix=默认安装路径
--sbin-path=PATH=主程序安装路径
--conf-path=PATH=主配置文件路径
--error-log-path=PATH=错误日志路径
-pid-path=PATH=pID文件路径
--lock-path=PATH=索文件路径
--user=普通用户
--group=组
--http-client-body-temp-path=PATH:定义临时目录路径
启用功能模块:
-with-rtsig_module
禁用为功能模块:
--without-poll_module
至于这些模块的介绍,请登录nginx官网查看
这里显示的启用,表示默认没启用
这里显示的禁用,表示默认启用
[root@www nginx-1.6.2]# ./configure --help
--help print this message
--prefix=PATH set installation prefix
--sbin-path=PATH set nginx binary pathname
--conf-path=PATH set nginx.conf pathname
--error-log-path=PATH set error log pathname
--pid-path=PATH set nginx.pid pathname
--lock-path=PATH set nginx.lock pathname
--user=USER set non-privileged user for
worker processes
--group=GROUP set non-privileged group for
worker processes
--builddir=DIR set build directory
--with-rtsig_module enable rtsig module
--with-select_module enable select module
2,创建nginx普通用户
[root@www nginx-1.6.2]# groupadd -r nginx
[root@www nginx-1.6.2]# useradd -g nginx -r nginx
[root@www nginx-1.6.2]# id nginx
uid=495(nginx) gid=492(nginx) groups=492(nginx)
[root@www nginx-1.6.2]#
3,编译
为了以后的迁移和备份删除,我们手动指定安装路径
./configure
--prefix=/usr/local/nginx 安装路径
--conf-path=/etc/nginx/nginx.conf 配置文件(也可以放在安装路径下,方便迁移)
--user=nginx 指定运行的普通用户
--group=nginx 指定运行的组
--error-log-path=/var/log/nginx/error.log 指明错误日志文件路径(也可以后盖配置文件)
--http-log-path=/var/log/nginx/access.log 指明访问日志路径
--pid-path=/var/run/nginx/nginx.pid pid文件路径
--lock-path=/var/lock/nginx.lock 索文件路径
--with_http_ssl_module 启用ssl模块
--with_http_stub_status_module 启用状态页面
--with_http_gzip_static_module 启用压缩功能
--with-http_flv_module 启用流媒体
--with-http_mp4_module 启用MP4模块
--http-client-body-temp-path=/var/tmp/nginx/client 指明临时文件路径 *这些路径需要创建
--http-proxy-temp-path=/var/tmp/nginx/proxy proxy
--http-fastcgi-temp-path=/var/tmp/nginx/fastcgi fastcgi
--http-uwsgi-temp-path=/var/tmp/nginx/uwsgi uwsgi
[root@www nginx-1.6.2]# ./configure --prefix=/usr/local/nginx --conf-path=/etc/nginx/nginx.conf --user=nginx --group=nginx --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx/nginx.pid --lock-path=/var/lock/nginx.lock --with-http_ssl_module --with-http_stub_status_module --with-http_gzip_static_module --with-http_flv_module --with-http_mp4_module --http-client-body-temp-path=/var/tmp/nginx/client --http-proxy-temp-path=/var/tmp/nginx/proxy --http-fastcgi-temp-path=/var/tmp/nginx/fastcgi --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi
[root@www nginx-1.6.2]# make && make install
[root@www ~]# mkdir -pv /var/tmp/nginx/{client,fastcgi,proxy,uwsgi}
mkdir: created directory `/var/tmp/nginx'
mkdir: created directory `/var/tmp/nginx/client'
mkdir: created directory `/var/tmp/nginx/fastcgi'
mkdir: created directory `/var/tmp/nginx/proxy'
mkdir: created directory `/var/tmp/nginx/uwsgi'
[root@www ~]# /usr/local/nginx/sbin/nginx
[root@www ~]# ss -tnlp | grep :80
LISTEN 0 128 *:80 *:* users:(("nginx",4528,6),("nginx",4529,6))
[root@www ~]#
配置文件:
main配置段:全局配置段
event{}: 定义event模型工作特性
http {} : 定义http协议相关的配置
配置指令:要以分号结尾,语法格式:directive value1 [value2...]
支持使用变量:
内置变量:模块会提供几建变量定义
自定义变量:set var_name value
主配置段的指令:
用于调试、定位问题
正常运行必备的配置
优化性能的配置
事件相关的配置
www.nginx.org
下载偶数,基数为开发版
在nginx-1.8后引入支持的新特性:
1,hash负载均衡方法:hash load balancing method
2,后端ssl证书校验 :backend SSL certificate
3,支持线程池
4, 代理请求的缓冲
主配置段的指令:
正常运行的必备配置:
1、user USERNAME [GROUPNAME];
指定运行worker进程的用户和组;
user nginx nginx;
2、pid /path/to/pid_file;
指定nginx守护进程的pid文件;
pid /var/run/nginx/nginx.pid;
3、worker_rlimit_nofile #;
指定所有worker进程所能够打开的最大文件句柄数;
性能优化相关的配置:
1、worker_processes #;
worker进程的个数;通常应该略少于CPU物理核心数;(比如是八核,设置7核,剩下一个给系统其他)
2、worker_cpu_affinity cpumask ...;
优点:提升缓存的命中率;
context switch进程切换本身会产生CPU的不必要的消耗;因此尽可能发挥CPU的最大化,的把进程绑定CPU上,但是你绑定后这颗CPU仍然可以被切换,只是被绑定的进程不能再其他切换到别的CPU而已。这样,被绑定的nginx进程的缓存有效性提高。
假设服务器有4课CPU,开始设定机器上的三个CPU给NGINX,开机就说明剩下一个给内核,这样一来,内核要调度任何资源,只能在最后一个CPU上调度,做内核隔离!
隔离中断,设定的着三课CPU不处理中断也不让任何程序调度,不受内核调度。nginx绑定后霸占三个内核
三个进程起来之后,假如说每一个worker进程支持一万个并发,那三万个就很轻松了。
前提是中断和隔离操作!
cpumask:
0000 0000
0000 0001 第一个CPU
0000 0010 第二个CPU
0000 0100 第三个CPU
0000 1000 第四个CPU
worker_cpu_affinity 00000001 00000010 00000100;
3、timer_resolution
计时器解析度;降低此值,可减少gettimeofday()系统调用的次数;
timer_resolution指:减少降低worker线程中的计时解析度,减少发起系统调用,任何一个系统中,如果系统调用很多,任何一次系统调用必然会产生软中断,产生软中断的直接结果就是模式转换,每一次的模式转换必然会消耗时间。没一个生产力非常强的经常,应该把大量的时间运行在用户空间。
比如:任何一个请求达到nginx时候,nginx响应会产生日志,日志会记录时间,一旦有请求到达,nginx响应必须获取当前系统时间,记录日志当中。获取日志时间的方式便是:gettimeofday。如果获取的日志时间解析度过大的话,就会带来结果是:1秒钟解析1千次,那也就是1秒钟发起1千次系统调用,如果设为毫秒,那便是1毫秒解析10次,时间解析度越低精度越低,时间解析度越高精度越高。当然,消耗的资源也是对称的。
4、worker_priority number;
指明worker进程的nice值;(nice=worker优先级)
-20, 19
100, 139
数字越小优先级越高,优先级越高优先调用
默认情况下优先级为0
事件相关的配置:
1、accept_mutex {off|on};
master调度用户请求至各worker进程时使用的负载均衡锁;on表示能让多个worker轮流地、序列化地去响应新请求;
2、lock_file file;
accept_mutex用到的锁文件路径;
3、use [epoll|rtsig|select|poll];
链接处理方法
指明使用的事件模型;建议让Nginx自行选择;
4、worker_connections #;
设定单个worker进程所能够处理的最大并发连接数量;
worker_connections 乘 work_processes
用户于调试、定位问题:
1、daemon {on|off};
是否以守护进程方式运行nginx;调试时应该设置为Off;
2、master_process {on|off};
是否以master/worker模型来运行nginx; 调试时可以设置为off;
3、error_log file | stderr | syslog:server=address[,parameter=value] | memory:size [debug | info | notice | warn | error | crit | alert | emerg];
error_log 位置 级别;
若要使用debug级别,需要在编译nginx时使用了--with-debug选项;
常需要进行调整的参数
worker_processes, worker_connections, worker_cpu_affinity, worker_priority

相关文章

LeaferJS 1.0 重磅发布:强悍的前端 Canvas 渲染引擎
10分钟搞定支持通配符的永久有效免费HTTPS证书
300 多个 Microsoft Excel 快捷方式
一步步配置基于kubeadmin的kubevip高可用
istio全链路传递cookie和header灰度
REST Web 服务版本控制

发布评论