首页> 搜索结果页
"设置nginx时间" 检索
共 4368 条结果
将VUE项目部署到ECS服务器上
ECS使用体验1、个人介绍我是一名大二的学生,近期实验室开发了实验室管理系统,老师让我做一个介绍系统的首页,首页做好了又让搞部署,方便用域名来访问,说参加比赛更有底气,我现在大二,年轻气盛,之前从来没有部署过,想着也不是什么难事,结果要租服务器,服务器需要资金,我还没参加比赛就要先投资了,正好看见了阿里云这个开发者计划,深得我心,于是便完成了任务免费领了一个。2、项目部署本次项目是一个vue项目,部署方式采用build打包成静态资源,然后使用nginx。2.1 nginx安装#需要安装前置依赖,一键安装所有的前置依赖 yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel [root@iZ0jl0ffkpvo74x04pmneoZ local]# tar -zxvf nginx-1.18.0.tar.gz #注意,解压之后不要把nginx-1.18.0的名字改为nginx,因为在配置nginx之后,会自动生成一个nginx文件夹,避免重名 [root@iZ0jl0ffkpvo74x04pmneoZ local]# cd nginx-1.18.0 [root@iZ0jl0ffkpvo74x04pmneoZ nginx-1.18.0]# ./configure [root@iZ0jl0ffkpvo74x04pmneoZ nginx-1.18.0]# make [root@iZ0jl0ffkpvo74x04pmneoZ nginx-1.18.0]# make install #返回上一级,已经多出了一个nginx文件夹 #进入nginx目录 [root@centos7 nginx]# ls conf html logs sbin [root@iZ0jl0ffkpvo74x04pmneoZ nginx]# cd sbin [root@iZ0jl0ffkpvo74x04pmneoZ sbin]# ls nginx2.2 nginx基本命令常用命令在sbin目录下执行相应的nginx命令即可启动[root@iZ0jl0ffkpvo74x04pmneoZ sbin]# ./nginx退出./nginx -s quit停止./nginx -s stop重启./nginx -s reload查看配置文件所在的目录./nginx -t查看版本信息./nginx -v #查看帮助信息 ./nginx -h查看运行状态ps -ef | grep nginx#查看nginx进程 cat nginx.pid2.3 配置文件http模块的命令alias 别名 设置别名keepalive_timeout [time] 设置超时连接时间,默认时间75s,time单位为秒resolver_timeout [time] 解析超时时间,默认值为30sserver模块命令server_name 服务器名称 设置服务器名称listen 端口号 设置监听的端口号charset 字符集 设置字符集设置访问路径2.4 将本地项目build打包使用 npm run build 命令打包vue项目,会在dist文件中生成相关的资源,最后将dist文件夹发到服务器上,然后再把nginx的配置文件中root后面设置服务器中dist的文件路径即可。3.访问在ECS控制台中找到安全组,开方对应的nginx端口号即可
文章
弹性计算  ·  JavaScript  ·  应用服务中间件  ·  nginx  ·  开发者
2021-10-15
将VUE项目部署到ECS服务器上
ECS使用体验1、个人介绍我是一名大二的学生,近期实验室开发了实验室管理系统,老师让我做一个介绍系统的首页,首页做好了又让搞部署,方便用域名来访问,说参加比赛更有底气,我现在大二,年轻气盛,之前从来没有部署过,想着也不是什么难事,结果要租服务器,服务器需要资金,我还没参加比赛就要先投资了,正好看见了阿里云这个开发者计划,深得我心,于是便完成了任务免费领了一个。2、项目部署本次项目是一个vue项目,部署方式采用build打包成静态资源,然后使用nginx。2.1 nginx安装#需要安装前置依赖,一键安装所有的前置依赖 yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel [root@iZ0jl0ffkpvo74x04pmneoZ local]# tar -zxvf nginx-1.18.0.tar.gz #注意,解压之后不要把nginx-1.18.0的名字改为nginx,因为在配置nginx之后,会自动生成一个nginx文件夹,避免重名 [root@iZ0jl0ffkpvo74x04pmneoZ local]# cd nginx-1.18.0 [root@iZ0jl0ffkpvo74x04pmneoZ nginx-1.18.0]# ./configure [root@iZ0jl0ffkpvo74x04pmneoZ nginx-1.18.0]# make [root@iZ0jl0ffkpvo74x04pmneoZ nginx-1.18.0]# make install #返回上一级,已经多出了一个nginx文件夹 #进入nginx目录 [root@centos7 nginx]# ls conf html logs sbin [root@iZ0jl0ffkpvo74x04pmneoZ nginx]# cd sbin [root@iZ0jl0ffkpvo74x04pmneoZ sbin]# ls nginx2.2 nginx基本命令 #常用命令 #在sbin目录下执行相应的nginx命令即可 #启动 [root@iZ0jl0ffkpvo74x04pmneoZ sbin]# ./nginx #退出 ./nginx -s quit #停止 ./nginx -s stop #重启 ./nginx -s reload #查看配置文件所在的目录 ./nginx -t #查看版本信息 ./nginx -v #查看帮助信息 ./nginx -h #查看运行状态 ps -ef | grep nginx #查看nginx进程 cat nginx.pid2.3 配置文件http模块的命令alias 别名 设置别名 keepalive_timeout [time] 设置超时连接时间,默认时间75s,time单位为秒 resolver_timeout [time] 解析超时时间,默认值为30sserver模块命令server_name 服务器名称 设置服务器名称 listen 端口号 设置监听的端口号 charset 字符集 设置字符集设置访问路径2.4 将本地项目build打包使用 npm run build 命令打包vue项目,会在dist文件中生成相关的资源,最后将dist文件夹发到服务器上,然后再把nginx的配置文件中root后面设置服务器中dist的文件路径即可。3.访问在ECS控制台中找到安全组,开方对应的nginx端口号即可
文章
弹性计算  ·  JavaScript  ·  应用服务中间件  ·  nginx  ·  开发者
2021-10-04
nginx 出现504 Gateway Time-out的解决方法
1.问题分析 nginx访问出现504 Gateway Time-out,一般是由于程序执行时间过长导致响应超时,例如程序需要执行90秒,而nginx最大响应等待时间为30秒,这样就会出现超时。    通常有以下几种情况导致 1.程序在处理大量数据,导致等待超时。 2.程序中调用外部请求,而外部请求响应超时。 3.连接数据库失败而没有停止,死循环重新连。 出现这种情况,我们可以先优化程序,缩短执行时间。另一方面,可以调大nginx超时限制的参数,使程序可以正常执行。 对于访问超时的设定,nginx与php都有相关的设置,可以逐一进行修改。 2.解决方法 nginx配置 nginx.conf中,设置以下几个参数,增加超时时间 fastcgi_connect_timeout fastcgi连接超时时间,默认60秒 fastcgi_send_timeout nginx 进程向 fastcgi 进程发送请求过程的超时时间,默认值60秒 fastcgi_read_timeout fastcgi 进程向 nginx 进程发送输出过程的超时时间,默认值60秒 php配置 php.ini max_execution_time php脚本最大执行时间    php-fpm request_terminate_timeout 设置单个请求的超时时间    php程序中可加入set_time_limit(seconds)设置最长执行时间 例如 set_time_limit(0) 表示不超时。
问答
应用服务中间件  ·  PHP  ·  数据库  ·  nginx
2018-09-02
Nginx 战斗准备:优化指南
Nginx 战斗准备:优化指南 大多数的Nginx安装指南告诉你如下基础知识——通过apt-get安装,修改这里或那里的几行配置,好了,你已经有了一个Web服务器了!而且,在大多数情况下,一个常规安装的nginx对你的网站来说已经能很好地工作了。然而,如果你真的想挤压出nginx的性能,你必须更深入一些。在本指南中,我将解释Nginx的那些设置可以微调,以优化处理大量客户端时的性能。需要注意一点,这不是一个全面的微调指南。这是一个简单的预览——那些可以通过微调来提高性能设置的概述。你的情况可能不同。 基本的 (优化过的)配置 我们将修改的唯一文件是nginx.conf,其中包含Nginx不同模块的所有设置。你应该能够在服务器的/etc/nginx目录中找到nginx.conf。首先,我们将谈论一些全局设置,然后按文件中的模块挨个来,谈一下哪些设置能够让你在大量客户端访问时拥有良好的性能,为什么它们会提高性能。本文的结尾有一个完整的配置文件。 高层的配置 nginx.conf文件中,Nginx中有少数的几个高级配置在模块部分之上。 user www-data; pid /var/run/nginx.pid; worker_processes auto; worker_rlimit_nofile 100000; user和pid应该按默认设置 - 我们不会更改这些内容,因为更改与否没有什么不同。 worker_processes 定义了nginx对外提供web服务时的worder进程数。最优值取决于许多因素,包括(但不限于)CPU核的数量、存储数据的硬盘数量及负载模式。不能确定的时候,将其设置为可用的CPU内核数将是一个好的开始(设置为“auto”将尝试自动检测它)。 worker_rlimit_nofile 更改worker进程的最大打开文件数限制。如果没设置的话,这个值为操作系统的限制。设置后你的操作系统和Nginx可以处理比“ulimit -a”更多的文件,所以把这个值设高,这样nginx就不会有“too many open files”问题了。 Events模块 events模块中包含nginx中所有处理连接的设置。 events { worker_connections 2048; multi_accept on; use epoll; } worker_connections设置可由一个worker进程同时打开的最大连接数。如果设置了上面提到的worker_rlimit_nofile,我们可以将这个值设得很高。 记住,最大客户数也由系统的可用socket连接数限制(~ 64K),所以设置不切实际的高没什么好处。 multi_accept 告诉nginx收到一个新连接通知后接受尽可能多的连接。 use 设置用于复用客户端线程的轮询方法。如果你使用Linux 2.6+,你应该使用epoll。如果你使用*BSD,你应该使用kqueue。想知道更多有关事件轮询?看下维基百科吧(注意,想了解一切的话可能需要neckbeard和操作系统的课程基础) (值得注意的是如果你不知道Nginx该使用哪种轮询方法的话,它会选择一个最适合你操作系统的)。 HTTP 模块 HTTP模块控制着nginx http处理的所有核心特性。因为这里只有很少的配置,所以我们只节选配置的一小部分。所有这些设置都应该在http模块中,甚至你不会特别的注意到这段设置。 http { server_tokens off; sendfile on; tcp_nopush on; tcp_nodelay on; } server_tokens 并不会让nginx执行的速度更快,但它可以关闭在错误页面中的nginx版本数字,这样对于安全性是有好处的。 sendfile可以让sendfile()发挥作用。sendfile()可以在磁盘和TCP socket之间互相拷贝数据(或任意两个文件描述符)。Pre-sendfile是传送数据之前在用户空间申请数据缓冲区。之后用read()将数据从文件拷贝到这个缓冲区,write()将缓冲区数据写入网络。sendfile()是立即将数据从磁盘读到OS缓存。因为这种拷贝是在内核完成的,sendfile()要比组合read()和write()以及打开关闭丢弃缓冲更加有效(更多有关于sendfile) tcp_nopush 告诉nginx在一个数据包里发送所有头文件,而不一个接一个的发送 tcp_nodelay 告诉nginx不要缓存数据,而是一段一段的发送--当需要及时发送数据时,就应该给应用设置这个属性,这样发送一小块数据信息时就不能立即得到返回值。 access_log off; error_log /var/log/nginx/error.log crit; access_log设置nginx是否将存储访问日志。关闭这个选项可以让读取磁盘IO操作更快(aka,YOLO)。 error_log 告诉nginx只能记录严重的错误。 keepalive_timeout 10; client_header_timeout 10; client_body_timeout 10; reset_timedout_connection on; send_timeout 10; keepalive_timeout 给客户端分配keep-alive链接超时时间。服务器将在这个超时时间过后关闭链接。我们将它设置低些可以让ngnix持续工作的时间更长。 client_header_timeout 和client_body_timeout 设置请求头和请求体(各自)的超时时间。我们也可以把这个设置低些。 reset_timeout_connection告诉nginx关闭不响应的客户端连接。这将会释放那个客户端所占有的内存空间。 send_timeout 指定客户端的响应超时时间。这个设置不会用于整个转发器,而是在两次客户端读取操作之间。如果在这段时间内,客户端没有读取任何数据,nginx就会关闭连接。 limit_conn_zone $binary_remote_addr zone=addr:5m; limit_conn addr 100; limit_conn为给定的key设置最大连接数。这里key是addr,我们设置的值是100,也就是说我们允许每一个IP地址最多同时打开有100个连接。 limit_conn_zone设置用于保存各种key(比如当前连接数)的共享内存的参数。5m就是5兆字节,这个值应该被设置的足够大以存储(32K*5)32byte状态或者(16K*5)64byte状态。 include /etc/nginx/mime.types; default_type text/html; charset UTF-8; include只是一个在当前文件中包含另一个文件内容的指令。这里我们使用它来加载稍后会用到的一系列的MIME类型。 default_type设置文件使用的默认的MIME-type。 charset设置我们的头文件中的默认的字符集。 以下两点对于性能的提升在伟大的WebMasters StackExchange中有解释。 gzip on; gzip_disable "msie6"; # gzip_static on; gzip_proxied any; gzip_min_length 1000; gzip_comp_level 4; gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript; gzip是告诉nginx采用gzip压缩的形式发送数据。这将会减少我们发送的数据量。 gzip_disable为指定的客户端禁用gzip功能。我们设置成IE6或者更低版本以使我们的方案能够广泛兼容。 gzip_static告诉nginx在压缩资源之前,先查找是否有预先gzip处理过的资源。这要求你预先压缩你的文件(在这个例子中被注释掉了),从而允许你使用最高压缩比,这样nginx就不用再压缩这些文件了(想要更详尽的gzip_static的信息,请点击这里)。 gzip_proxied允许或者禁止压缩基于请求和响应的响应流。我们设置为any,意味着将会压缩所有的请求。 gzip_min_length设置对数据启用压缩的最少字节数。如果一个请求小于1000字节,我们最好不要压缩它,因为压缩这些小的数据会降低处理此请求的所有进程的速度。 gzip_comp_level设置数据的压缩等级。这个等级可以是1-9之间的任意数值,9是最慢但是压缩比最大的。我们设置为4,这是一个比较折中的设置。 gzip_type设置需要压缩的数据格式。上面例子中已经有一些了,你也可以再添加更多的格式。 # cache informations about file descriptors, frequently accessed files # can boost performance, but you need to test those values open_file_cache max=100000 inactive=20s; open_file_cache_valid 30s; open_file_cache_min_uses 2; open_file_cache_errors on; ## # Virtual Host Configs # aka our settings for specific servers ## include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*; open_file_cache打开缓存的同时也指定了缓存最大数目,以及缓存的时间。我们可以设置一个相对高的最大时间,这样我们可以在它们不活动超过20秒后清除掉。 open_file_cache_valid 在open_file_cache中指定检测正确信息的间隔时间。 open_file_cache_min_uses 定义了open_file_cache中指令参数不活动时间期间里最小的文件数。 open_file_cache_errors指定了当搜索一个文件时是否缓存错误信息,也包括再次给配置中添加文件。我们也包括了服务器模块,这些是在不同文件中定义的。如果你的服务器模块不在这些位置,你就得修改这一行来指定正确的位置。 一个完整的配置 user www-data; pid /var/run/nginx.pid; worker_processes auto; worker_rlimit_nofile 100000; events { worker_connections 2048; multi_accept on; use epoll; } http { server_tokens off; sendfile on; tcp_nopush on; tcp_nodelay on; access_log off; error_log /var/log/nginx/error.log crit; keepalive_timeout 10; client_header_timeout 10; client_body_timeout 10; reset_timedout_connection on; send_timeout 10; limit_conn_zone $binary_remote_addr zone=addr:5m; limit_conn addr 100; include /etc/nginx/mime.types; default_type text/html; charset UTF-8; gzip on; gzip_disable "msie6"; gzip_proxied any; gzip_min_length 1000; gzip_comp_level 6; gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript; open_file_cache max=100000 inactive=20s; open_file_cache_valid 30s; open_file_cache_min_uses 2; open_file_cache_errors on; include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*; } 编辑完配置后,确认重启nginx使设置生效。 sudo service nginx restart 后记 就这样!你的Web服务器现在已经就绪,之前困扰你的众多访问者的问题来吧。这并不是加速网站的唯一途径,很快我会写更多介绍其他加速网站方法的文章的。 原文发布时间:2015-04-15 本文来自云栖合作伙伴“linux中国”
文章
XML  ·  缓存  ·  应用服务中间件  ·  nginx  ·  数据格式
2017-05-02
Nginx深度优化
隐藏版本号 修改用户与组 网页缓存时间 日志切割 连接超时 更改进程数 网页压缩 防盗链 FPM参数优化 一、隐藏版本号 1.在centos7系统中通过curl命令查看 curl -I http://192.168.100.26 2.修改nginx.conf配置文件,在http{}内添加server_tokens off;语句 3.重启nginx killall -1 nginx 4.使用curl命令查看验证 curl -I http://192.168.100.26 二、修改用户与组 Nginx运行时进程需要有用户和组的支持,用以实现对网站文件读取时进行访问控制。主进程由root创建,子进程由指定的用户与组创建,默认为nobody。 1.编译nginx时指定用户与组 ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module 2.修改nginx配置文件指定用户与组 vim /usr/local/nginx/conf/nginx.conf 3.重启nginx killall -1 nginx 4.查看nginx进程信息(主进程root用户,子进程nginx用户) ps aux | grep nginx 三、网页缓存时间 当Nginx将网页数据放回给客户端后,可以设置缓存时间,以便日后进行重复请求访问,以加快访问速度、同时减轻服务器压力,一般对静态资源进行设置,对动态网页不要设置缓存时间。 1.下面对网站的图片进行指定缓存时间设置 2.修改nginx配置文件,指定缓存时间为1天 vim /usr/local/nginx/conf/nginx.conf location ~.(gif|jpg|jepg|png|bmp|ico)$ { root html; expires 1d; } 3.重启nginx killall -1 nginx 4.Fiddler工具进行抓包验证 四、日志切割 Nginx通过nginx的信号控制功能脚本来实现日志的自动切割,并将脚本加入到Linux的计划性任务中,让脚本在每天固定的时间执行,得以实现日志切割功能。 1.编写fenge.sh脚本 vim /opt/fenge.sh #!/bin/bash #Filename:fenge.sh d=$(date -d "-1 day" "+%Y%m%d") #显示一天前的时间 logs_path="/var/log/nginx" pid_path="/usr/local/nginx/logs/nginx.pid" [ -d $logs_path ] || mkdir -p $logs_path mv /usr/local/nginx/logs/access.log ${logs_path}/test.com-access.log-$d kill -USR1 $(cat $pid_path) #创建新日志文件 find $logs_path -mtime +30 | xargs rm -rf #删除30天前的日志文件 2. 为脚本赋予执行权限 chmod +x /opt/fenge.sh 3.执行脚本,测试日志文件是否分割成功 . /fenge.sh 4.添加计划性任务 crontab -e #每日凌晨1:00执行脚本 0 1 * /opt/fenge.sh 五、连接超时 一般网站中,为了避免同一个客户长时间占用连接,造成资源浪费,可设置相应的连接超时参数,实现对连接访问时间的控制。 1. 修改nginx.conf配置文件 vim /usr/local/nginx/conf/nginx.conf 2.重启nginx killall -1 nginx 3.对网站进行访问,并使用Fiddler工具进行抓包验证 六、更改进程数 在高并发环境中,需要启动更多的Nginx进程以保证快速响应,用以处理用户的请求,避免造成阻塞。 1.查看ngixn运行进程的个数 cat /proc/cpuinfo | grep -c "physical" 2.修改nginx.conf配置文件 vim /usr/local/nginx/conf/nginx.conf 3.重启nginx killall-1 nginx 4.查看nginx进程数 ps aux | grep nginx 七、网页压缩 Nginx服务器将输出内容压缩后进行传输,以节约网站的带宽,提升用户的访问体验,默认已经安装了该模块。 1.修改nginx.conf配置文件 vim /usr/local/nginx/conf/nginx.conf gzip on; gzip_buffers 4 64k; gzip_http_version 1.1; gzip_comp_level 2; gzip_min_length 1k; gzip_vary on; gzip_types text/plain text/javascript application/x-javascript text/css text/xml application/xml application/xml+rss text/jpg text/png; 2.重启nginx killall -1 nginx 3.创建一个大于1KB以上的网页文件,然后对其进行访问抓包 curl -I -H "Accept-Encoding: gzip, deflate" 192.168.100.26/ 八、防盗链 在网站中,一般都要配置防盗链功能,以避免网站内容被非法盗用,造成经济损失,也避免了流量的浪费。 1.修改nginx.conf配置文件 vim /usr/local/nginx/conf/nginx.conf location ~.(jpg|gif|swf)$ { #匹配.jpg 、.gif 、或 .swf结尾的文件 valid_referers none blocked .abc.com abc.com; #信任域名站点 if ( $invalid_referer ) { rewrite ^/ http://www.abc.com/error.png; #重写返回error.png } } 2.重启nginx killall -1 nginx 九、FPM参数优化 Nginx的PHP解析功能实现是由FPM处理的,为了提高PHP的处理速度,可对FPM模块进行参数的调整。 1.安装带有FPM模块的PHP环境; 2.FPM进程有两种启动方式,由pm参数指定,分别是static和dynamic,前者将产生固定数据的FPM进程,后者将以动态的方式产生FPM进程; 1.修改php-fpm.conf文件 vi php-fpm.conf pid = run/php-fpm.pid pm = dynamic #动态方式 pm.max_children=20 #最大启动进程数量为20个 pm.start_servers = 5 #初始启动时进程为5个 pm.min_spare_servers = 2 #最小空闲进程数为2个 pm.max_spare_servers = 8 #最大空闲进程数为8个 迎工作一到五年的Java工程师朋友们加入Java架构开发:860113481 群内提供免费的Java架构学习资料(里面有高可用、高并发、高性能及分布式、Jvm性能调优、Spring源码,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多个知识点的架构资料)合理利用自己每一分每一秒的时间来学习提升自己,不要再用"没有时间“来掩饰自己思想上的懒惰!趁年轻,使劲拼,给未来的自己一个交代!
文章
监控  ·  Java  ·  应用服务中间件  ·  开发工具  ·  nginx
2018-07-15
Nginx服务整理 优化点
Nginx最大客户连接数算法一些遐想 现在很多互联网公司都在使用nginx,并且替换掉以前的Apache,nginx的优点就不说了,浅聊两句nginx的某些配置参数,找到这些参数设置的目的和关联性,并且理论计算出nginx的并发量。   废话不多说,贴跟其相关的配置选项     依次讲解各个参数的用途: worker_processes:表示开启nginx的worker进程的个数,nginx启动会开两种进程,master进程用来管理调度,worker进程用来处理请求; 上面表示两种设置方法,比如 方法一:worker_processes auto;   表示设置服务器cpu核数匹配开启nginx开启的worker进程数   查看cpu核数:lscpu、cat /proc/cpuinfo 方法二:nginx设置cpu亲和力   worker_processes 8;   worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;   00000001表示启用第一个CPU内核,00000010表示启用第二个CPU内核,以此类推 worker_cpu_affinity:表示开启八个进程,第一个进程对应着第一个CPU内核,第二个进程对应着第二个CPU内核,以此类推。 这种设置方法更高效,因将每个cpu核提供给固定的worker进程服务,减少cpu上下午切换带来的资源浪费 如果服务器cpu有限 比如:2核CPU,开启2个进程,设置如下 worker_processes     2; worker_cpu_affinity 01 10; 比如:2核CPU,开启4个进程,设置如下 worker_processes     4; worker_cpu_affinity 01 10 01 10;   注意:本人基于nginx1.6.2版本(后面版本没有测试),压测实验证明worker_processes最多开启8个,8个以上性能没什么提升,反而稳定性变得更低。   worker_rlimit_nofile 65535; 这个参数表示worker进程最多能打开的文件句柄数,基于liunx系统ulimit设置 查看系统文件句柄数最大值:ulimit -n 注意:Linux一切皆文件,所有请求过来最终目的访问文件,所以该参数值设置等同于liunx系统ulimit设置为优   events {     use epoll;     worker_connections 65535;     multi_accept on; } events模块处理网络事件 epoll:网络模型高效(相当于建立索引查找结果),nginx配置应该启用该参数 worker_connections:该参数表示设置一个worker进程最多开启多少线程数 优化设置应该等同于worker_rlimit_nofile设置值,表明一个线程处理一个http请求,同时可以处理一个文件数,各个模块之间协调合作不等待。   http {     keepalive_timeout  65; keepalive_timeout:该参数表示客户端和nginx之间设置http(基于tcp协议)长连接,长连接的优势不用说了吧,长连接是否打开基于业务类型 设置65秒表示一个TCP请求保持会话时常为65秒,65秒内TCP状态码转化至TIME_WAIT转态 如果要使该线程可以拿来重新处理其他的请求:   方法一:TCP的TIME_WAIT转换至CLOSE转态,等待60秒左右(2倍MLS时间:表示请求绕着全球走一圈的时间)没有得到响应自然释放连接;   方法二:TCP复用和强制回收       cat /etc/sysctl.conf:设置net.ipv4.tcp_tw_reuse、net.ipv4.tcp_tw_recycle等参数   上面讲解各个参数的功能,这次主要目的讲解nginx能处理客户端最大连接数,以下讲解的都是理论值(因不考虑I/O调度或者网络因素等其他原因) 我们知道nginx即可以作为服务器使用,又可以作为反向代理使用,计算公式如下: nginx作为http服务器的时候:       max_clients = worker_processes * worker_connections/2 nginx作为反向代理服务器的时候:       max_clients = worker_processes * worker_connections/4   注意: 为什么除以2:该公式基于http 1.1协议,一次请求大多数浏览器发送两次连接,并不是request和response响应占用两个线程(很多人也是这么认为,实际情况:请求是双向的,连接是没有方向的,由上面的图可以看出来) 为什么除以4:因nginx作为方向代理,客户端和nginx建立连接,nginx和后端服务器也要建立连接   由此,我们可以计算nginx作为http服务器最大并发量(作为反向代理服务器自己类推),可以为压测和线上环境的优化提供一些理论依据: 单位时间(keepalive_timeout)内nginx最大并发量C C=worker_processes * worker_connections/2=8*65535/2 而每秒的并发量CS CS=worker_processes * worker_connections/(2*65)   基于上面的公式知道,为了避免大量TCP连接time_out情况,优化过程中可以考虑这方面的原因: 1:keepalive_timeout设置时常(会话保持):可以根据业务来设置多少,因一次请求真正释放掉线程为其他的连接使用所花时间为:keepalive_timeout+2MLS 2:nginx作为反向代理使用:keepalive_timeout只是开启客户端和nginx的长连接,nginx和后端的长连接默认是没有开启的,设置如下:     upstream test         {            server 172.16.34.2:8000;       server 172.16.34.3:8000;       server 172.16.34.4:8000;       keepalive 60;         } 本文转自 liqius 51CTO博客,原文链接:http://blog.51cto.com/szgb17/1909644,如需转载请自行联系原作者
文章
网络协议  ·  应用服务中间件  ·  nginx
2017-11-28
Web服务器那些招
服务器每天日志处理 使用服务器自带的/etc/logrotate 配置文件: /etc/logrotate.d/nginx 比如nginx: /usr/local/nginx/logs/access.log { rotate 3 compress delaycompress daily dateext ifempty maxage 3 sharedscripts postrotate /usr/bin/kill -USR1 `cat /var/run/nginx.pid` endscript } http://blog.csdn.net/iiisan/article/details/1180419 注意这里的postrotate,发送一个USR1信号给nginx,这样nginx收到这个信号就会重新获取新的accesslog文件的句柄了。否则nginx持有的文件句柄有可能是错误的。 nginx的fast-cgi param fastcgi_param RELEASE 1可以设置下 来区分是开发环境还是线上环境 代码中可以使用$_SERVER[‘RELEASE’]获取 如何估计单机可承受的在线数量 1 获取机器内存 2 看每个php-fpm会占用多少内存,计算可以开多少个php-fpm 3 看每个php进程会占用多少时间 4 计算每秒一个php-fpm会处理多少请求 5 可以计算出单个机器可以处理多少请求 nginx的access_log nginx的access_log必须设置off才会停止 如果什么都没有设置,它还是会记录access_log Linux内核升级 2.6.32比以前的版本对系统的稳定和性能提升有指数级的优化。所以建议低版本都升级到这个版本以上 xarg参数i 问题: echo a|xarg echo b 这样会返回b a 要想返回a b就要这样设置 echo a|xarg –i echo {} b xarg就会代替大括号 suggest表现 对于前端有suggest的功能 千万不要监听onchange事件,当输入框输入一个键的时候就调用一次接口,这样对后端压力会很大。 应该使用setTimeOut或者setIntval之类的方式,定期判断输入框是否有变化,然后再决定是否调用接口。 nginx的worker_processes该怎么设置 设置和cpu核数一样 并且还需要设置nginx_worker_cpu_affinity 这里有详细的文章参考: http://www.1990y.com/nginx-worker-process-affinity/comment-page-1/#comment-4973 其中nginx_worker_cpu_affinity如果不设置的话就是让计算机自己判断,其实效率和一般的也没有什么大的区别 Get请求的Url长度限制 HTTP协议并没有限制url长度 PHP没有限制url长度 一般浏览器限制url长度为2000字节 apache限制url为8000字节,在LimitRequestLine中设置 nginx对header的限制为large_client_header_buffers
文章
应用服务中间件  ·  PHP  ·  nginx  ·  Apache  ·  Linux  ·  前端开发
2016-05-17
给小白的 Nginx 30分钟入门指南
Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。 为什么要用Nginx? 目前 Nginx 的主力竞争对手莫过于 Apache ,在这里小编对两者做一个简单的对比,帮助大家更好的理解 Nginx 的优势。 1、作为 Web 服务器: 相比 Apache,Nginx 使用更少的资源,支持更多的并发连接,体现更高的效率,这点使 Nginx 尤其受到虚拟主机提供商的欢迎。在高连接并发的情况下,Nginx是Apache服务器不错的替代品: Nginx在美国是做虚拟主机生意的老板们经常选择的软件平台之一,能够支持高达 50000 个并发连接数的响应, 感谢Nginx 为我们选择了 epoll and kqueue 作为开发模型。 Nginx作为负载均衡服务器: Nginx 既可以在内部直接支持 Rails 和 PHP 程序对外进行服务, 也可以支持作为 HTTP代理 服务器对外进行服务。Nginx采用C进行编写, 不论是系统资源开销还是CPU使用效率都比 Perlbal 要好很多。 2、Nginx 配置简洁, Apache 复杂: Nginx 启动特别容易, 并且几乎可以做到7*24不间断运行,即使运行数个月也不需要重新启动. 你还能够不间断服务的情况下进行软件版本的升级。 Nginx 静态处理性能比 Apache 高 3倍以上,Apache 对 PHP 支持比较简单,Nginx 需要配合其他后端来使用 ,Apache 的组件比 Nginx 多。 3、最核心的区别在于: apache是同步多进程模型,一个连接对应一个进程;nginx是异步的,多个连接(万级别)可以对应一个进程 。 4、两者的擅长领域分别是: nginx的优势是处理静态请求,cpu内存使用率低,apache适合处理动态请求,所以现在一般前端用nginx作为反向代理抗住压力,apache作为后端处理动态请求。 Nginx 基本使用方法 系统平台:CentOS release 6.6 (Final) 64位。 一、安装编译工具及库文件 二、首先要安装 PCRE 1、PCRE 作用是让 Nginx 支持 Rewrite 功能。下载 PCRE 安装包,下载地址: http://downloads.sourceforge.net/project/pcre/pcre/8.35/pcre-8.35.tar.gz 2、解压安装包: 3、进入安装包目录 4、编译安装 5、查看pcre版本 三、安装 Nginx 1、下载 Nginx,下载地址:http://nginx.org/download/nginx-1.6.2.tar.gz 2、解压安装包 3、进入安装包目录 4、编译安装 5、查看nginx版本 到此,nginx安装完成。 四、Nginx 配置 创建 Nginx 运行使用的用户 www: 配置nginx.conf ,将/usr/local/webserver/nginx/conf/nginx.conf替换为以下内容 检查配置文件ngnix.conf的正确性命令: 五、启动 Nginx Nginx 启动命令如下: 六、访问站点 从浏览器访问我们配置的站点ip: Nginx 常用指令说明 1. main 全局配置 nginx在运行时与具体业务功能(比如http服务或者email服务代理)无关的一些参数,比如工作进程数,运行的身份等。 woker_processes 2 在配置文件的顶级main部分,worker角色的工作进程的个数,master进程是接收并分配请求给worker处理。这个数值简单一点可以设置为cpu的核数grep ^processor /proc/cpuinfo | wc -l,也是 auto 值,如果开启了ssl和gzip更应该设置成与逻辑CPU数量一样甚至为2倍,可以减少I/O操作。如果nginx服务器还有其它服务,可以考虑适当减少。 worker_cpu_affinity 也是写在main部分。在高并发情况下,通过设置cpu粘性来降低由于多CPU核切换造成的寄存器等现场重建带来的性能损耗。如worker_cpu_affinity 0001 0010 0100 1000; (四核)。 worker_connections 2048 写在events部分。每一个worker进程能并发处理(发起)的最大连接数(包含与客户端或后端被代理服务器间等所有连接数)。nginx作为反向代理服务器,计算公式 最大连接数 = worker_processes * worker_connections/4,所以这里客户端最大连接数是1024,这个可以增到到8192都没关系,看情况而定,但不能超过后面的worker_rlimit_nofile。当nginx作为http服务器时,计算公式里面是除以2。 worker_rlimit_nofile 10240 写在main部分。默认是没有设置,可以限制为操作系统最大的限制65535。 use epoll 写在events部分。在Linux操作系统下,nginx默认使用epoll事件模型,得益于此,nginx在Linux操作系统下效率相当高。同时Nginx在OpenBSD或FreeBSD操作系统上采用类似于epoll的高效事件模型kqueue。在操作系统不支持这些高效模型时才使用select。 2. http服务器 与提供http服务相关的一些配置参数。例如:是否使用keepalive啊,是否使用gzip进行压缩等。 sendfile on 开启高效文件传输模式,sendfile指令指定nginx是否调用sendfile函数来输出文件,减少用户空间到内核空间的上下文切换。对于普通应用设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的负载。 keepalive_timeout 65 : 长连接超时时间,单位是秒,这个参数很敏感,涉及浏览器的种类、后端服务器的超时设置、操作系统的设置,可以另外起一片文章了。长连接请求大量小文件的时候,可以减少重建连接的开销,但假如有大文件上传,65s内没上传完成会导致失败。如果设置时间过长,用户又多,长时间保持连接会占用大量资源。 send_timeout : 用于指定响应客户端的超时时间。这个超时仅限于两个连接活动之间的时间,如果超过这个时间,客户端没有任何活动,Nginx将会关闭连接。 client_max_body_size 10m 允许客户端请求的最大单文件字节数。如果有上传较大文件,请设置它的限制值 client_body_buffer_size 128k 缓冲区代理缓冲用户端请求的最大字节数 模块http_proxy: 这个模块实现的是nginx作为反向代理服务器的功能,包括缓存功能(另见文章) proxy_connect_timeout 60 nginx跟后端服务器连接超时时间(代理连接超时) proxy_read_timeout 60 连接成功后,与后端服务器两个成功的响应操作之间超时时间(代理接收超时) proxy_buffer_size 4k 设置代理服务器(nginx)从后端realserver读取并保存用户头信息的缓冲区大小,默认与proxy_buffers大小相同,其实可以将这个指令值设的小一点 proxy_buffers 4 32k proxy_buffers缓冲区,nginx针对单个连接缓存来自后端realserver的响应,网页平均在32k以下的话,这样设置 proxy_busy_buffers_size 64k 高负荷下缓冲大小(proxy_buffers*2) proxy_max_temp_file_size 当proxy_buffers放不下后端服务器的响应内容时,会将一部分保存到硬盘的临时文件中,这个值用来设置最大临时文件大小,默认1024M,它与proxy_cache没有关系。大于这个值,将从upstream服务器传回。设置为0禁用。 proxy_temp_file_write_size 64k 当缓存被代理的服务器响应到临时文件时,这个选项限制每次写临时文件的大小。proxy_temp_path(可以在编译的时候)指定写到哪那个目录。 proxy_pass,proxy_redirect见 location 部分。 模块http_gzip: gzip on : 开启gzip压缩输出,减少网络传输。 gzip_min_length 1k : 设置允许压缩的页面最小字节数,页面字节数从header头得content-length中进行获取。默认值是20。建议设置成大于1k的字节数,小于1k可能会越压越大。 gzip_buffers 4 16k : 设置系统获取几个单位的缓存用于存储gzip的压缩结果数据流。4 16k代表以16k为单位,安装原始数据大小以16k为单位的4倍申请内存。 gzip_http_version 1.0 : 用于识别 http 协议的版本,早期的浏览器不支持 Gzip 压缩,用户就会看到乱码,所以为了支持前期版本加上了这个选项,如果你用了 Nginx 的反向代理并期望也启用 Gzip 压缩的话,由于末端通信是 http/1.0,故请设置为 1.0。 gzip_comp_level 6 : gzip压缩比,1压缩比最小处理速度最快,9压缩比最大但处理速度最慢(传输快但比较消耗cpu) gzip_types :匹配mime类型进行压缩,无论是否指定,”text/html”类型总是会被压缩的。 gzip_proxied any : Nginx作为反向代理的时候启用,决定开启或者关闭后端服务器返回的结果是否压缩,匹配的前提是后端服务器必须要返回包含”Via”的 header头。 gzip_vary on : 和http头有关系,会在响应头加个 Vary: Accept-Encoding ,可以让前端的缓存服务器缓存经过gzip压缩的页面,例如,用Squid缓存经过Nginx压缩的数据。。 3. server虚拟主机 http服务上支持若干虚拟主机。每个虚拟主机一个对应的server配置项,配置项里面包含该虚拟主机相关的配置。在提供mail服务的代理时,也可以建立若干server。每个server通过监听地址或端口来区分。 listen 监听端口,默认80,小于1024的要以root启动。可以为listen *:80、listen 127.0.0.1:80等形式。 server_name 服务器名,如localhost、www.example.com,可以通过正则匹配。 模块http_stream 这个模块通过一个简单的调度算法来实现客户端IP到后端服务器的负载均衡,upstream后接负载均衡器的名字,后端realserver以 host:port options; 方式组织在 {} 中。如果后端被代理的只有一台,也可以直接写在 proxy_pass 。 4. location http服务中,某些特定的URL对应的一系列配置项。 root /var/www/html 定义服务器的默认网站根目录位置。如果locationURL匹配的是子目录或文件,root没什么作用,一般放在server指令里面或/下。 index index.jsp index.html index.htm 定义路径下默认访问的文件名,一般跟着root放 proxy_pass http:/backend 请求转向backend定义的服务器列表,即反向代理,对应upstream负载均衡器。也可以proxy_pass http://ip:port。 proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 这四个暂且这样设,如果深究的话,每一个都涉及到很复杂的内容,也将通过另一篇文章来解读。 关于location匹配规则的写法,可以说尤为关键且基础的,参考文章 nginx配置location总结及rewrite规则写法; 5. 其它 5.1 访问控制 allow/deny Nginx 的访问控制模块默认就会安装,而且写法也非常简单,可以分别有多个allow,deny,允许或禁止某个ip或ip段访问,依次满足任何一个规则就停止往下匹配。如: 我们也常用 httpd-devel 工具的 htpasswd 来为访问的路径设置登录密码: 这样就生成了默认使用CRYPT加密的密码文件。打开上面nginx-status的两行注释,重启nginx生效。 5.2 列出目录 autoindex Nginx默认是不允许列出整个目录的。如需此功能,打开nginx.conf文件,在location,server 或 http段中加入autoindex on;,另外两个参数最好也加上去: autoindex_exact_size off; 默认为on,显示出文件的确切大小,单位是bytes。改为off后,显示出文件的大概大小,单位是kB或者MB或者GB autoindex_localtime on; 默认为off,显示的文件时间为GMT时间。改为on后,显示的文件时间为文件的服务器时间
文章
缓存  ·  应用服务中间件  ·  Apache  ·  nginx  ·  数据安全/隐私保护
2018-02-02
《高性能Linux服务器构建实战》——1.4节Nginx的安装与配置
1.4 Nginx的安装与配置 1.4.1 下载与安装NginxNginx的官方网站是http://sysoev.ru/nginx/,英文主页为http://nginx.net,从这里可以获得Nginx的最新版本信息。Nginx有三个版本:稳定版、开发版和历史稳定版。开发版更新较快,包含最新的功能和bug的修复,但同时也可能会出现新的bug。开发版一旦更新稳定下来,就会被加入稳定版分支中。然而有些新功能不一定会被加到稳定版中去。稳定版更新较慢,但是bug较少,可以作为生产环境的首选,因此通常建议使用稳定版。历史稳定版为以往稳定版本的汇总,不包含最新的功能。这里选择当前的稳定版本nginx-0.7.65作为介绍对象,开始介绍编译安装。在安装Nginx之前,确保系统已经安装了gcc、openssl-devel、pcre-devel和zlib-devel软件库。Linux开发库是在安装系统时通过手动选择安装的,gcc、openssl-devel、zlib-devel三个软件库可以通过安装光盘直接选择安装,而pcre-devel库默认不在系统光盘中,所以这里重点介绍pcre-devel库。1.安装Nginx所需的pcre-devel库安装pcre库是为了使Nginx支持HTTP Rewrite 模块。下面进行安装,过程如下: [root@localhost home]# tar zxvf pcre-8.02.tar.gz [root@localhost home]# cd pcre-8.02 [root@localhost pcre-8.02]#make [root@localhost pcre-8.02]#make install 2.开始安装Nginx Nginx的安装非常简单。在默认情况下,经过编译安装的Nginx包含了大部分可用模块。可以通过“./configure --help”选项设置各个模块的使用情况,例如对不需要的http_ssi模块,可通过“--without-http_ssi_module”方式关闭此。同理,如果需要“http_perl”模块,那么可以通过“--with-http_perl_module”方式进行安装。下面是安装过程: [root@localhost home]# tar zxvf nginx-0.7.65.tar.gz [root@localhost home]#cd nginx-0.7.65 [root@localhostnginx-0.7.65]#./configure \ --with-http_stub_status_module --prefix=/opt/nginx [root@localhost nginx-0.7.65]#make [root@localhost nginx-0.7.65]#make install 在上面的configure选项中,“--with-http_stub_status_module”可以用来启用 Nginx 的 NginxStatus 功能,以监控 Nginx 的当前状态。至此,Nginx已经安装完成了。 1.4.2 Nginx配置文件的结构Nginx的配置文件是一个纯文本文件,它一般位于Nginx安装目录的conf目录下,整个配置文件是以block的形式组织的。每个block一般以一个大括号“{}”来表示,block可以分为几个层次,整个配置文件中main指令位于最高层,在main层下面可以有Events、HTTP等层级,而在HTTP层中又包含有server层,即server block,server block中又可分为location层,并且一个server block中可以包含多个location block。一个完整的配置文件结构如图1-2所示。 在了解完配置文件结构之后,就可以开始配置和调试Nginx了。 1.4.3 配置与调试NginxNginx安装完毕后,会产生相应的安装目录,根据前面的安装路径,Nginx的配置文件路径为/opt/nginx/conf,其中nginx.conf为Nginx的主配置文件。这里重点介绍nginx.conf这个配置文件。Nginx配置文件主要分为4部分:main(全局设置)、server(主机设置)、upstream(负载均衡服务器设置)和 location(URL匹配特定位置的设置)。main部分设置的指令将影响其他所有设置;server部分的指令主要用于指定主机和端口;upstream指令主要用于负载均衡,设置一系列的后端服务器;location部分用于匹配网页位置。这四者之间的关系如下:server继承main,location继承server,upstream既不会继承其他设置也不会被继承。在这4个部分当中,每个部分都包含若干指令,这些指令主要包含Nginx的主模块指令、事件模块指令、HTTP核心模块指令。同时每个部分还可以使用其他HTTP模块指令,例如Http SSL模块、Http Gzip Static模块和Http Addition模块等。下面通过一个Nginx配置实例,详细介绍nginx.conf每个指令的含义。为了能更清楚地了解Nginx的结构和每个配置选项的含义,这里按照功能点将Nginx配置文件分为7个部分依次讲解。下面就围绕这7个部分进行介绍。 Nginx的全局配置下面这段内容是对Nginx的全局属性配置,代码如下: user nobody nobody; worker_processes 4; error_log logs/error.log notice; pid logs/nginx.pid; worker_rlimit_nofile 65535; events{ use epoll; worker_connections 65536; } 上面这段代码中每个配置选项的含义解释如下: user是个主模块指令,指定Nginx Worker进程运行用户以及用户组,默认由nobody账号运行。 worker_processes是个主模块指令,指定了Nginx要开启的进程数。每个Nginx进程平均耗费10MB~12MB内存。根据经验,一般指定一个进程足够了,如果是多核CPU,建议指定和CPU的数量一样多的进程数即可。 error_log是个主模块指令,用来定义全局错误日志文件。日志输出级别有debug、info、notice、warn、error、crit可供选择,其中,debug输出日志最为最详细,而crit输出日志最少。 pid是个主模块指令,用来指定进程id的存储文件位置。 worker_rlimit_nofile用于绑定worker进程和CPU, Linux内核2.4以上可用。 events指令用来设定Nginx的工作模式及连接数上限。 use是个事件模块指令,用来指定Nginx的工作模式。Nginx支持的工作模式有select、poll、kqueue、epoll、rtsig和/dev/poll。其中select和poll都是标准的工作模式,kqueue和epoll是高效的工作模式,不同的是epoll用在Linux平台上,而kqueue用在BSD系统中。对于Linux系统,epoll工作模式是首选。 worker_connections也是个事件模块指令,用于定义Nginx每个进程的最大连接数,默认是1024。最大客户端连接数由worker_processes和worker_connections决定,即max_client=worker_processesworker_connections,在作为反向代理时变为:max_clients = worker_processes worker_connections/4。进程的最大连接数受Linux系统进程的最大打开文件数限制,在执行操作系统命令“ulimit -n 65536”后worker_connections的设置才能生效。 HTTP服务器配置接下来开始对HTTP服务器进行配置。 下面这段内容是Nginx对HTTP服务器相关属性的配置,代码如下: http{ include conf/mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] ' '"$request" $status $bytes_sent ' '"$http_referer" "$http_user_agent" ' '"$gzip_ratio"'; log_format download '$remote_addr - $remote_user [$time_local] ' '"$request" $status $bytes_sent ' '"$http_referer" "$http_user_agent" ' '"$http_range" "$sent_http_content_range"'; client_max_body_size 20m; client_header_buffer_size 32k; large_client_header_buffers 4 32k; sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 60; client_header_timeout 10; client_body_timeout 10; send_timeout 10; 下面详细介绍这段代码中每个配置选项的含义。 include是个主模块指令,实现对配置文件所包含的文件的设定,可以减少主配置文件的复杂度。类似于Apache中的include方法。 default_type属于HTTP核心模块指令,这里设定默认类型为二进制流,也就是当文件类型未定义时使用这种方式,例如在没有配置PHP环境时,Nginx是不予解析的,此时,用浏览器访问PHP文件就会出现下载窗口。下面的代码实现对日志格式的设定。 log_format main '$remote_addr - $remote_user [$time_local] ' '"$request" $status $bytes_sent ' '"$http_referer" "$http_user_agent" ' '"$gzip_ratio"'; log_format download '$remote_addr - $remote_user [$time_local] ' '"$request" $status $bytes_sent ' '"$http_referer" "$http_user_agent" ' '"$http_range" "$sent_http_content_range"'; log_format是Nginx的HttpLog模块指令,用于指定Nginx日志的输出格式。main为此日志输出格式的名称,可以在下面的access_log指令中引用。 client_max_body_size用来设置允许客户端请求的最大的单个文件字节数。 client_header_buffer_size用于指定来自客户端请求头的headerbuffer大小。对于大多数请求,1KB的缓冲区大小已经足够,如果自定义了消息头或有更大的cookie,可以增加缓冲区大小。这里设置为32KB。 large_client_header_buffers用来指定客户端请求中较大的消息头的缓存最大数量和大小, “4”为个数,“128K”为大小,最大缓存为4个128KB。 sendfile参数用于开启高效文件传输模式。将tcp_nopush和tcp_nodely两个指令设置为on,用于防止网络阻塞。 keepalive_timeout用于设置客户端连接保持活动的超时时间。在超过这个时间之后,服务器会关闭该连接。 client_header_timeout用于设置客户端请求头读取超时时间。如果超过这个时间,客户端还没有发送任何数据,Nginx将返回“Request time out(408)”错误。 client_body_timeout用于设置客户端请求主体读取超时时间,默认值为60。如果超过这个时间,客户端还没有发送任何数据,Nginx将返回“Request time out(408)”错误。 send_timeout用于指定响应客户端的超时时间。这个超时仅限于两个连接活动之间的时间,如果超过这个时间,客户端没有任何活动,Nginx将会关闭连接。 HttpGzip模块配置下面配置Nginx的HttpGzip模块。这个模块支持在线实时压缩输出数据流。要查看是否安装了此模块,需要使用下面的命令: [root@localhost conf]# /opt/nginx/sbin/nginx -V nginx version: nginx/0.7.65 configure arguments: --with-http_stub_status_module --with-http_gzip_static_module --prefix=/opt/nginx 通过/opt/nginx/sbin/nginx -V命令可以查看安装Nginx时的编译选项。由输出可知,我们已经安装了HttpGzip模块。下面是HttpGzip模块在Nginx配置中的相关属性设置: gzip on; gzip_min_length 1k; gzip_buffers 4 16k; gzip_http_version 1.1; gzip_comp_level 2; gzip_types text/plain application/x-javascript text/css application/xml; gzip_vary on; gzip用于设置开启或者关闭gzip模块,“gzip on”表示开启gzip压缩,实时压缩输出数据流。 gzip_min_length用于设置允许压缩的页面最小字节数,页面字节数从header头的Content-Length中获取。默认值是0,不管页面多大都进行压缩。建议设置成大于1K的字节数,小于1K可能会越压越大。 gzip_buffers表示申请4个单位为16K的内存作为压缩结果流缓存,默认值是申请与原始数据大小相同的内存空间来存储gzip压缩结果。 gzip_http_version用于设置识别HTTP协议版本,默认是1.1,目前大部分浏览器已经支持gzip解压,使用默认即可。 gzip_comp_level用来指定gzip压缩比,1 压缩比最小,处理速度最快;9 压缩比最大,传输速度快,但处理最慢,也比较消耗CPU资源。 gzip_types用来指定压缩的类型,无论是否指定,“text/html”类型总是会被压缩的。 gzip_vary选项可以让前端的缓存服务器缓存经过gzip压缩的页面,例如,用Squid缓存经过Nginx压缩的数据。4.负载均衡配置下面设定负载均衡的服务器列表。 upstream ixdba.net{ ip_hash; server 192.168.12.133:80; server 192.168.12.134:80 down; server 192.168.12.135:8009 max_fails=3 fail_timeout=20s; server 192.168.12.136:8080; } upstream是Nginx的HTTP Upstream模块,这个模块通过一个简单的调度算法来实现客户端IP到后端服务器的负载均衡。在上面的设定中,通过upstream指令指定了一个负载均衡器的名称ixdba.net。这个名称可以任意指定,在后面需要用到的地方直接调用即可。Nginx的负载均衡模块目前支持4种调度算法,下面进行分别介绍,其中后两项属于第三方调度算法。 轮询(默认)。每个请求按时间顺序逐一分配到不同的后端服务器,如果后端某台服务器宕机,故障系统被自动剔除,使用户访问不受影响。 Weight。指定轮询权值,Weight值越大,分配到的访问机率越高,主要用于后端每个服务器性能不均的情况下。 ip_hash。每个请求按访问IP的hash结果分配,这样来自同一个IP的访客固定访问一个后端服务器,有效解决了动态网页存在的session共享问题。 fair。这是比上面两个更加智能的负载均衡算法。此种算法可以依据页面大小和加载时间长短智能地进行负载均衡,也就是根据后端服务器的响应时间来分配请求,响应时间短的优先分配。Nginx本身是不支持fair的,如果需要使用这种调度算法,必须下载Nginx的upstream_fair模块。 url_hash。此方法按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,可以进一步提高后端缓存服务器的效率。Nginx本身是不支持url_hash的,如果需要使用这种调度算法,必须安装Nginx 的hash软件包。在HTTP Upstream模块中,可以通过server指令指定后端服务器的IP地址和端口,同时还可以设定每个后端服务器在负载均衡调度中的状态。常用的状态有: down,表示当前的server暂时不参与负载均衡。 backup,预留的备份机器。当其他所有的非backup机器出现故障或者忙的时候,才会请求backup机器,因此这台机器的压力最轻。 max_fails,允许请求失败的次数,默认为1。当超过最大次数时,返回proxy_next_upstream 模块定义的错误。 fail_timeout,在经历了max_fails次失败后,暂停服务的时间。max_fails可以和fail_timeout一起使用。注意 当负载调度算法为ip_hash时,后端服务器在负载均衡调度中的状态不能是weight和backup。 server虚拟主机配置下面介绍对虚拟主机的配置。建议将对虚拟主机进行配置的内容写进另外一个文件,然后通过include指令包含进来,这样更便于维护和管理。 server{ listen 80; server_name 192.168.12.188 www.ixdba.net; index index.html index.htm index.jsp; root /web/wwwroot/www.ixdba.net charset gb2312; server标志定义虚拟主机开始;listen用于指定虚拟主机的服务器端口;server_name用来指定IP地址或者域名,多个域名之间用空格分开;index用于设定访问的默认首页地址;root指令用于指定虚拟主机的网页根目录,这个目录可以是相对路径,也可以是绝对路径;charset用于设置网页的默认编码格式。 access_log logs/www.ixdba.net.access.log main; access_log用来指定此虚拟主机的访问日志存放路径。最后的main用于指定访问日志的输出格式。 URL匹配配置URL地址匹配是Nginx配置中最灵活的部分。 location支持正则表达式匹配,也支持条件判断匹配,用户可以通过location指令实现Nginx对动、静态网页的过滤处理。 以下这段设置是通过location指令来对网页URL进行分析处理,所有扩展名为.gif、.jpg、.jpeg、.png、.bmp、.swf的静态文件都交给Nginx处理,而expires用来指定静态文件的过期时间,这里是30天。 location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ { root /web/wwwroot/www.ixdba.net; expires 30d; } 以下这段设置是将upload和html下的所有文件都交给Nginx来处理,当然,upload和html目录包含在/web/wwwroot/www.ixdba.net目录中。 location ~ ^/(upload|html)/ { root /web/wwwroot/www.ixdba.net; expires 30d; } 在最后这段设置中,location是对此虚拟主机下动态网页的过滤处理,也就是将所有以.jsp为后缀的文件都交给本机的8080端口处理。     location ~ .*.jsp$ { index index.jsp; proxy_pass http://localhost:8080; } 7. StubStatus模块配置 StubStatus模块能够获取Nginx自上次启动以来的工作状态,此模块非核心模块,需要在Nginx编译安装时手工指定才能使用。 以下指令指定启用获取Nginx工作状态的功能。 location /NginxStatus { stub_status on;              access_log logs/NginxStatus.log; auth_basic "NginxStatus"; auth_basic_user_file ../htpasswd; } stub_status为“on”表示启用StubStatus的工作状态统计功能;access_log 用来指定StubStatus模块的访问日志文件;auth_basic是Nginx的一种认证机制;auth_basic_user_file用来指定认证的密码文件。由于Nginx的auth_basic认证采用的是与Apache兼容的密码文件,因此需要用Apache的htpasswd命令来生成密码文件。例如要添加一个webadmin用户,可以使用下面的方式生成密码文件: /usr/local/apache/bin/htpasswd -c /opt/nginx/conf/htpasswd webadmin 会得到以下提示信息: New password: 输入密码之后,系统会要求再次输入密码,确认之后添加用户成功。要查看Nginx的运行状态,可以输入http://ip/ NginxStatus,然后输入刚刚创建的用户名和密码就可以看到如下信息: Active connections: 1 server accepts handled requests 393411 393411 393799 Reading: 0 Writing: 1 Waiting: 0 Active connections表示当前活跃的连接数,第三行的3个数字表示 Nginx当前总共处理了393411个连接, 成功创建了393 411次握手,总共处理了393 799个请求。最后一行的Reading表示Nginx读取到客户端Header信息数; Writing表示Nginx返回给客户端的Header信息数;Waiting表示Nginx已经处理完、正在等候下一次请求指令时的驻留连接数。在最后这段设置中,设置了虚拟主机的错误信息返回页面,通过error_page指令可以定制各种错误信息的返回页面。在默认情况下,Nginx会在主目录的html目录中查找指定的返回页面。特别需要注意的是,这些错误信息的返回页面大小一定要超过512KB,否则会被IE浏览器替换为IE默认的错误页面。 error_page 404 /404.html; error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } } 1.4.4 Nginx的启动、关闭和平滑重启在完成对nginx.conf文件的配置后,就可以启动服务了。Nginx自身提供了一些用于日常维护的命令,下面进行详细的介绍。 Nginx基本信息检查(1)检查Nginx配置文件的正确性 Nginx提供的配置文件调试功能非常有用,可以快速定位配置文件存在的问题。执行如下命令可检测配置文件的正确性: /opt/nginx/sbin/nginx –t 或者 /opt/nginx/sbin/nginx -t -c /opt/nginx/conf/nginx.conf 其中,“-t”参数用于检查配置文件是否正确,但并不执行,“-c”参数用于指定配置文件路径,如果不指定配置文件路径,Nginx默认会在安装时指定的安装目录下查找conf/nginx.conf文件。 如果检测结果显示如下信息,说明配置文件正确。 the configuration file /opt/nginx/conf/nginx.conf syntax is ok configuration file /opt/nginx/conf/nginx.conf test is successful (2)显示Nginx的版本以及相关编译信息 在命令行执行以下命令可以显示安装Nginx的版本信息: /opt/nginx/sbin/nginx -v 执行以下命令可显示安装的Nginx版本和相关编译信息: /opt/nginx/sbin/nginx -V 上述命令不但显示Nginx的版本信息,同时显示Nginx在编译时指定的相关模块信息。 Nginx的启动、关闭与重启Nginx对进程的控制能力非常强大,可以通过信号指令控制进程。常用的信号有: QUIT,表示处理完当前请求后,关闭进程。 HUP,表示重新加载配置,也就是关闭原有的进程,并开启新的工作进程。此操作不会中断用户的访问请求,因此可以通过此信号平滑地重启Nginx。 USR1,用于Nginx的日志切换,也就是重新打开一个日志文件,例如每天要生成一个新的日志文件时,可以使用这个信号来控制。 USR2,用于平滑升级可执行程序。 WINCH ,从容关闭工作进程。(1)Nginx的启动Nginx的启动非常简单,只需输入如下命令: /opt/nginx/sbin/nginx 即可完成Nginx的启动。Nginx启动后,可以通过如下命令查看Nginx的启动进程: [root@localhost logs]# ps -ef|grep nginx root 16572 1 0 11:14 ? 00:00:00 nginx: master process /opt/nginx/sbin/nginx nobody 16591 16572 0 11:15 ? 00:00:00 nginx: worker process nobody 16592 16572 0 11:15 ? 00:00:00 nginx: worker process nobody 16593 16572 0 11:15 ? 00:00:00 nginx: worker process nobody 16594 16572 0 11:15 ? 00:00:00 nginx: worker process (2)Nginx的关闭如果要关闭Nginx进程,可以使用如下命令:kill -XXX pid其中,XXX就是信号名,pid是Nginx的进程号,可以通过如下两个命令获取: ps -ef | grep "nginx: master process" | grep -v "grep" | awk -F ' ' '{print $2}' cat /opt/nginx/logs/nginx.pid (3)Nginx的平滑重启要不间断服务地重新启动Nginx,可以使用如下命令: kill -HUP ‘cat /opt/nginx/logs/nginx.pid‘
文章
Web App开发  ·  监控  ·  JavaScript  ·  算法  ·  应用服务中间件  ·  Linux
2017-08-01
Nginx 代理 | 学习笔记
开发者学堂课程【HTTP 代理系统第三课时:Nginx 代理】学习笔记,与课程紧密联系,让用户快速学习知识。课程地址:https://developer.aliyun.com/learning/course/803/detail/13874Nginx 代理 内容简介一. Nginx 的使用二. Nginx 配置反向代理三. Nginx 性能优化 一.Nginx 的使用1.1打开系统操作 1.1.1首先使用Curl 输入localhost ,此时没有启动Nginx。无法访问端口。  1.1.2此时可以使用systemctl status nginx   1.1.3此时启动nginx 进程进行启动  1.1.4 此时重新访问localhost 。  1.1.5添加参数,成功启动Nginx 1.2Nginx 的简单操作  1.2.1Nginx-h 帮助查看信息  1.2.2Nginx-t 检测配置文件是否可用 1.2.3Nginx-s reload 重新加载配置文件例:文件出错可先试用Nginx-t 检测,之后进行试用Nginx-s reload 重新启动。此方法可用确保每次加载信息都是正常可行的。例:如试用systemectl restart nginx ,则会显示报错。  1.2.4因此在使用之前要修改配置,重新试用Nginx-t检测,之后进行试用Nginx-s reload 重新启动,确保配置文件准确无误。   1.2.5Nginx-v 查看当前版本  1.2.6Nginx-V 查看配置文件的构建参数。二. Nginx 配置代理2.1 Nginx 配置正向定理2.2 Nginx 配置反向代理与正向代理不同的是在location 中使用了proxy-pass 传递了一个地址,是指所有请求代理地址进行请求。  三.Nginx 性能优化3.1 IPv4系统内核参数修改可以通过修改/etc/systclconf 来更新内核参数,并通过systcl-p 来应用修改参数 net.corenet_dev_max_backlog:表示每个网络接口接受数据包的速率比内核处理包的速率快时,允许发送到队列的数据包的最大数目。可以通过调整大小,使队列中有更多的数据。 netcore.somaxconn:表示系统同时发起的TCP链接数,可以提升该值,获得更高的并发阈值。 netipv4.tcpmaxorphans:表示系统最多允许存在多少TCPSocket 不关联到handler 上。超过这个数字的请求会被复位。netipv4tcpmaxsynbacklog:表示尚未收到客户端确认信息的连接请求最大值,内存越大,这个值可以修改的越大。3.2 CPU 参数修改Nginx 中有两个和内核调度有关的指令,可以提升Nginx 的并行处理能力 worker_process:该指令可以设置Nginx 的进程数,可以根据CPU 的核心数来设置,设置为CPU核心数或核心数的倍数。 workder_cpu_affnity:该指令可以为不同的woker_process 分配CPU.举例:当把woker_process 值设为4时,workder_cpu_affnity 为4位的2进制数。依次分配位置。举例:当把woker_process 值设为6时,workder_cpu_affnity 为6位的2进制数。依次分配位置3.3 网络参数修改keepalivetimeout 设置了Nginx 与客户端保持连接的超时时间,超过了这个时间,服务器会关闭连接。 send_timeout:设置Nginx 相应客户端的超时时间,如果客户端在这个时间内没有响应,就会关闭连接。 client_header_buffer_size:设置了客户端请求头缓冲区大小,默认为1Kb。如果Cookie过大,超出缓冲区大小,就会报错。 multi_accept设定Nginx 是否尽可能多的接受客户端的请求。 举例:如何配置修改Nginx 参数第一步:修改参数。在sysctl.conf下进行修改第二步:应用修改执行systcl-p 第三步:查看Nginx的配置在Nginx.conf当中查看配置信息第四步:检测是否正常运行输入Nginx-t进行检测再输入Nginx-s reload检测如果显示错误,再次进行输入systemctl statsu nginx,确定是否启动成功。输入Systemectl start nginx  启动第五步:配置虚拟主机与反向代理把配置文件放在Conf.d目录中 配置正向代理。配置反向代理 
文章
网络协议  ·  应用服务中间件  ·  调度  ·  nginx  ·  开发者
2021-09-16
...
跳转至:
华章出版社
455 人关注 | 1015 讨论 | 10123 内容
+ 订阅
  • 带你读《Java并发编程的艺术》之一:并发编程的挑战
查看更多 >
飞天加速计划
125 人关注 | 0 讨论 | 2947 内容
+ 订阅
  • 不用已知解决未知,踏足数据科学家培养的“无人之境”
  • 唤醒梦想,阿里云为西部学子打开一扇窗
  • 拒绝实验拖后腿,云为大学计算机基础课程插上翅膀
查看更多 >
阿里云开发者学堂
120568 人关注 | 2864 讨论 | 2201 内容
+ 订阅
  • 阿里云认证系列训练营——云计算ACP来袭
  • 超强讲师阵容!7天0元带你学完MySQL基础架构、SQL性能调优、MGR!
  • Serverless 应用引擎 SAE训练营火热报名中!
查看更多 >
开发与运维
5193 人关注 | 125226 讨论 | 185199 内容
+ 订阅
  • 走进RDS|说说关系型数据库与Serverless
  • IDEA 敏捷开发技巧——实时模版
  • 工作中的设计模式 —— 原型模式
查看更多 >
云计算
21601 人关注 | 57831 讨论 | 36437 内容
+ 订阅
  • 走进RDS|说说关系型数据库与Serverless
  • 可能有人听过ThreadLocal,但一定没人听过ThreadLocal对象池
  • 使用 Kubectl 管理 Kubernetes 容器平台
查看更多 >