https://www.jianshu.com/p/65892355cad5javascript
nginx配置多个服务器很简单,复制 server, 修改ip,端口,和项目部署路径便可php
nginx 配置文件安装的 软件库
gcc、 openssl-devel、 pcre-devel和zlib-devel
1 安装命令,注意 –with-http_stub_status_module 启动了
Nginx 的 NginxStatus,用来监控状态css
wget http://nginx.org/download/nginx-1.0.14.tar.gz
tar zxvf nginx-1.0.14.tar.gz
./configure --with-http_stub_status_module --prefix=/opt/nginx
cd nginx-1.0.14
make
2 配置的结构
main,主配置影响全部
event
http
server 指定主机端口
location 位置
upstream 负载均衡
3 模块
Nginx的主模块指令、
事件模块指令、
HTTP核心模块指令,
Http SSL模块、
HttpGzip Static模块
Http Addition模块
4 真实配置html
user nobody nobody;
worker_processes 2;
error_log logs/error.log notice;
pid logs/nginx.pid;
worker_rlimit_nofile 65535;
events{
use epoll;
worker_connections 65536;前端
不用说都是主模块指令
user 主模块指令, 用户和用户组, nobody用户
worker_processes , 进程数消耗10m内次
和cup数量相同
nobody linux 建立时自带的 用户名,没有特权,谁都能用
error_log 错误日志,就不重复了,6大级别,debug最多
debug、info、notice、warn、error、crit
worker_rlimit_nofile 绑定workder进程和cpu???,没用处???
pid 指定pid存放的位置,解释下pid,只记录主进程号,
刚建立nginx没有,启动后自动保存,目录是默认,可用修改就在这里java
他的用处除了 用kill -9杀死nginx,还能够经过pid
杀死进程
/data/logs/nginx.pid kill –QUIT `cat /data/logs/nginx.pid`,没试过node
剩下的events 工做模式和 一个进程链接上限
use 事件模型指令, linux首选是epoll(这个最重要),标准的是select poll,
kqueue用在bsd上 ,共有 select、poll、kqueue、epoll、rtsig和/dev/polllinux
worker_connections 默认1024,可设置65536,
实际链接数 max_client最大是 =进程数乘以 单进程链接数,如反向代理则除以四
这个参数受到 liuxn 最大打开file的限制,执行ulimit -n65536就行了nginx
好博客地址:web
https://blog.csdn.net/wangbin_0729/article/details/82109693
BSD 系统伯克利系统,说白了就是unix 5 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; 解释一下 一堆超时和 文件大小的设置,都不用改 include 引入其余文件,难道能够是其余 .conf??,的确如此例如是 * include /usr/local/nginx/conf/vhost/*;,里面配置了 server{xxxx} default_type 默认二进制流 下面两个超长的 是日志的配置和解释 log_format是Nginx的HttpLog模块指令,用于指定Nginx日志的输出格式。main为此日志输出格式的名称,能够在下面的access_log指令中引用。 client_max_body_size 一我的访问 body大小 client_header_buffer_size 指定header大小 用于指定来自客户端请求头的headerbuffer大小。对于大多数请求,1K的缓冲区大小已经足够,若是自定义了消息头或有更大的Cookie,能够增长缓冲区大小。这里设置为32K; large_client_header_buffers 用来指定客户端请求中较大的消息头的缓存最大数量和大小, “4”为个数,“128K”为大小,最大缓存量为4个128K; sendfile 参数用于开启高效文件传输模式。将tcp_nopush和tcp_nodelay两个指令设置为on用于防止网络阻塞; keepalive_timeout 设置客户端链接保持活动的超时时间。在超过这个时间以后,服务器会关闭该链接; client_header_timeout 设置客户端请求头读取超时时间。若是超过这个时间,客户端尚未发送任何数据,Nginx将返回“Request time out(408)”错误; client_body_timeout 设置客户端请求主体读取超时时间。若是超过这个时间,客户端尚未发送任何数据,Nginx将返回“Request time out(408)”错误,默认值是60; send_timeout 指定响应客户端的超时时间。这个超时仅限于两个链接活动之间的时间,若是超过这个时间,客户端没有任何活动,Nginx将会关闭链接。 7 gzip说的太好不用再解释了,先查装了模块没,用力在线实时压缩流 HttpGzip模块配置 下面配置Nginx的HttpGzip模块。这个模块支持在线实时压缩输出数据流。 看是否安装了HttpGzip模块: [root@vps ~]# /opt/nginx/sbin/nginx -V nginx version: nginx/1.0.14 built by gcc 4.4.6 20110731 (Red Hat 4.4.6-3) (GCC) 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压缩的数据。 而后负载均衡,虚拟主机和location的配置说明 负载均衡配置 下面设定负载均衡的服务器列表: 1 2 3 4 5 6 7 upstream cszhi.com{ ip_hash; server 192.168.8.11:80; server 192.168.8.12:80 down; server 192.168.8.13:8009 max_fails=3 fail_timeout=20s; server 192.168.8.146:8080; } upstream是Nginx的HTTP Upstream模块,这个模块经过一个简单的调度算法来实现客户端IP到后端服务器的负载均衡。 在上面的设定中,经过upstream指令指定了一个负载均衡器的名称cszhi.com。这个名称能够任意指定,在后面须要的地方直接调用便可。 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。 2.5 server虚拟主机配置 下面介绍对虚拟主机的配置。 建议将对虚拟主机进行配置的内容写进另一个文件,而后经过include指令包含进来,这样更便于维护和管理。 1 2 3 4 5 6 7 server{ listen 80; server_name 192.168.8.18 cszhi.com; index index.html index.htm index.php; root /wwwroot/www.cszhi.com charset gb2312; access_log logs/www.ixdba.net.access.log main; server标志定义虚拟主机开始,listen用于指定虚拟主机的服务端口,server_name用来指定IP地址或者域名,多个域名之间用空格分 开。index用于设定访问的默认首页地址,root指令用于指定虚拟主机的网页根目录,这个目录能够是相对路径,也能够是绝对路径。Charset用于 设置网页的默认编码格式。access_log用来指定此虚拟主机的访问日志存放路径,最后的main用于指定访问日志的输出格式。 2.6 location URL匹配配置 URL地址匹配是进行Nginx配置中最灵活的部分。 location支持正则表达式匹配,也支持条件判断匹配,用户能够经过location指令实现Nginx对动、静态网页进行过滤处理。使用location URL匹配配置还能够实现反向代理,用于实现PHP动态解析或者负载负载均衡。 如下这段设置是经过location指令来对网页URL进行分析处理,全部扩展名以.gif、.jpg、.jpeg、.png、.bmp、.swf结尾的静态文件都交给nginx处理,而expires用来指定静态文件的过时时间,这里是30天。 1 2 3 4 location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ { root /wwwroot/www.cszhi.com; expires 30d; } 如下这段设置是将upload和html下的全部文件都交给nginx来处理,固然,upload和html目录包含在/web/wwwroot/www.cszhi.com目录中。 1 2 3 4 location ~ ^/(upload|html)/ { root /web/wwwroot/www.cszhi.com; expires 30d; } 在最后这段设置中,location是对此虚拟主机下动态网页的过滤处理,也就是将全部以.jsp为后缀的文件都交给本机的8080端口处理。 1 2 3 4 location ~ .*.php$ { index index.php; proxy_pass http://localhost:8080; } 2.7 StubStatus模块配置 StubStatus模块可以获取Nginx自上次启动以来的工做状态,此模块非核心模块,须要在Nginx编译安装时手工指定才能使用此功能。 如下指令实指定启用获取Nginx工做状态的功能。 1 2 3 4 5 6 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命令来生成密码文件,例如要添加一个test用户,可使用下面方式生成密码文件: /usr/local/apache/bin/htpasswd -c /opt/nginx/conf/htpasswd test 而后输入两次密码后确认以后添加用户成功。 要查看Nginx的运行状态,能够输入http://ip/NginxStatus,输入建立的用户名和密码就能够看到Nginx的运行状态: Active connections: 1 server accepts handled requests 34561 35731 354399 Reading: 0 Writing: 3 Waiting: 0 Active connections表示当前活跃的链接数,第三行的三个数字表示 Nginx当前总共处理了34561个链接, 成功建立次握手, 总共处理了354399个请求。最后一行的Reading表示Nginx读取到客户端Header信息数, Writing表示Nginx返回给客户端的Header信息数 ,“Waiting”表示Nginx已经处理完,正在等候下一次请求指令时的驻留链接数。 在最后这段设置中,设置了虚拟主机的错误信息返回页面,经过error_page指令能够定制各类错误信息的返回页面。在默认状况下,Nginx会在主目录的html目录中查找指定的返回页面,特别须要注意的是,这些错误信息的返回页面大小必定要超过512K,否者会被ie浏览器替换为ie默认的错误页面。 1 2 3 4 5 6 7 error_page 404 /404.html; error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } }
gzip 牛逼的地方在于压缩后html,js,css变为原来的1/3
Nginx开启Gzip压缩功能, 可使网站的css、js 、xml、html 文件在传输时进行压缩,提升访问速度, 进而优化Nginx性能! Web网站上的图片,视频等其它多媒体文件以及大文件,由于压缩效果很差,因此对于图片没有必要支压缩,若是想要优化,能够图片的生命周期设置长一点,让客户端来缓存。 开启Gzip功能后,Nginx服务器会根据配置的策略对发送的内容, 如css、js、xml、html等静态资源进行压缩, 使得这些内容大小减小,在用户接收到返回内容以前对其进行处理,以压缩后的数据展示给客户。这样不只能够节约大量的出口带宽,提升传输效率,还能提高用户快的感知体验, 一箭双雕; 尽管会消耗必定的cpu资源,可是为了给用户更好的体验仍是值得的。
通过Gzip压缩后页面大小能够变为原来的30%甚至更小,这样,用户浏览页面的时候速度会快得多。Gzip 的压缩页面须要浏览器和服务器双方都支持,实际上就是服务器端压缩,传到浏览器后浏览器解压并解析。浏览器那里不须要咱们担忧,由于目前的巨大多数浏览器 都支持解析Gzip过的页面。
这里有nginx配置公钥私钥 https的 说明
http://www.javashuo.com/article/p-mthdykog-gx.html
其中
server 就是虚拟主机的意思
root 是指定项目的根目录,适用与server和location。能够指定多个,若是locaiton没有指定,会往其外层的server或http中寻找继承,
nginx中root指令的地址,实际上是替换了匹配后的url中的host。
nginx https
12.1. SSL工做流程
- 浏览器发送一个https的请求给服务器;
- 服务器要有一套数字证书,能够本身制做(后面的操做会具体介绍),也能够向组织申请,区别就是本身颁发的证书须要客户端验证经过,才能够继续访问,而使用受信任的公司申请的证书,则不会弹出>提示页面,这套证书其实就是一对公钥和私钥;
- 服务器会把公钥传输给客户端;
- 客户端(浏览器)收到公钥后,会验证其是否合法有效,无效会有警告提醒,有效则会生成一串随机数,并用收到的公钥加密;
- 客户端把加密后的随机字符串传输给服务器;
- 服务器收到加密随机字符串后,先用私钥解密(公钥加密,私钥解密),获取到这一串随机数后,再用这串随机字符串加密传输的数据(该加密为对称加密,所谓对称加密,就是将数据和私钥也就是这个随机字符串>经过某种算法混合在一块儿,这样除非知道私钥,不然没法获取数据内容);
- 服务器把加密后的数据传输给客户端;
- 客户端收到数据后,再用本身的私钥也就是那个随机字符串解密;
12.2 SSL 工做示意图
12.3. 生成SSL密钥对
cd /usr/local/nginx/conf
openssl genrsa -des3 -out tmp.key 2048
//key文件为私钥openssl rsa -in tmp.key -out admin.key
//转换key,取消密码rm -f tmp.key
openssl req -new -key admin.key -out admin.csr
//生成证书请求文件,须要拿这个文件和私钥一块儿生产公钥文件openssl x509 -req -days 365 -in admin.csr -signkey admin.key -out admin.crt
// 这里的admin.crt为公钥12.4. Nginx配置 SSL
vim /usr/local/nginx/conf/vhost/ssl.conf
//加入以下内容server { listen 443; server_name admin.com; index index.html index.php; root /data/wwwroot/admin.com; ssl on; ssl_certificate admin.crt; ssl_certificate_key admin.key; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; }
-t && -s reload
//若报错unknown directive “ssl” ,须要从新编译nginx,加上“--with-http_ssl_module”mkdir /data/wwwroot/aming.com
echo “ssl test page.”>/data/wwwroot/admin.com/index.html