目录
回到目录
序言Nginx是由lgor塞索耶夫为俄罗斯访问量第二大的rambler.ru网站设计开发的。自2004年发布以来,借助开源的力量,已经接近成熟和完善。
Nginx功能丰富,可以作为HTTP服务器,反向代理服务器,邮件服务器。支持FastCGI、ssl、虚拟主机、URL重写、Gzip等功能。并支持许多第三方模块扩展。
Nginx的稳定性、功能集、样本配置文件和对系统资源的低消耗使他后来居上,在全球活跃网站中使用率为12.18%,约2220万个网站。
简直太牛逼了。如果你不上瘾的话,你可以在百度百科或者一些书上找到这样的吹嘘,到处都是。
回到目录
Nginx常用功能1.Http代理,反向代理:作为web服务器最常用的功能之一,尤其是反向代理。
在这里,我给你两张图来解释一下转发代理和响应代理。详情可以看资料。
当充当反向代理时,Nginx可以提供稳定的性能和灵活的转发功能。Nginx可以根据不同的规律匹配采取不同的转发策略,比如图片文件末端取文件服务器,动态页面取web服务器。只要定期写,有相应的服务器解决方案,就可以随便玩。并且Nginx做出错误页面跳转,判断异常等。对返回的结果。如果分布式服务器出现异常,他可以将请求转发到另一个服务器,然后自动移除异常的服务器。
2.负载平衡
Nginx提供了两种负载均衡策略:内置策略和扩展策略。内置策略有轮询、加权轮询和Ip哈希。扩张策略是天马行空空。没有你想不到的,他做不到的。你可以参考所有的负载均衡算法,找出来让他实现。
图3,理解这三种负载平衡算法的实现。
Ip hash算法,对客户端请求的Ip进行哈希处理,然后根据哈希结果将同一客户端ip的请求分发到同一个服务器进行处理,可以解决会话不共享的问题。
3.web缓存
Nginx可以用不同的方式缓存不同的文件,配置灵活,支持FastCGI_Cache,主要用于缓存FastCGI动态程序。使用第三方的ngx_cache_purge,可以添加或删除URL缓存内容。
4.Nginx相关地址
源代码:https://trac.nginx.org/nginx/browser
官方网站:http://www.nginx.org/
回到目录
Nginx配置文件结构如果您已经下载了安装文件,您可能希望打开conf文件夹中的Nginx.conf文件,其中也存储了Nginx服务器的基本配置和默认配置。
nginx.conf中的注释符号位号
nginx文件的结构,对于初学者来说,可以多看看。
的默认配置
Nginx文件结构
...#全局块 事件{ #事件块 ... } http # http block { ...#http全局块[//]位置[模式]#位置块 { ... } 位置[模式] { ... } }一般有运行nginx服务器的用户组,nginx进程pid存储路径,日志存储路径,配置文件介绍,允许生成的worker进程号。
2.事件阻塞:配置影响nginx服务器或与用户的网络连接。有每个进程的最大连接数,选择哪个事件驱动的模型处理连接请求,是否同时接受多个网络连接,开启多个网络连接的序列化等。
3.http块:您可以嵌套多个服务器,配置大多数功能,如代理、缓存和日志定义,以及配置第三方模块。如文件导入、mime类型定义、日志定制、是否使用sendfile传输文件、连接超时、单次连接请求数量等。
4.服务器块:配置虚拟主机的相关参数。一个http中可以有多个服务器。
5.位置块:配置请求的路由和各种页面的处理。
这里给大家一个配置文件,作为理解,也包含在我搭建的一个测试机里面给大家举例。
# # # # # # # # # #每个指令都必须以分号结束。# # # # # # # # # # # # # # # #用户管理员管理员;#配置用户或组,默认为nobody nobody。 # worker _ processes 2;#允许生成的进程数,默认为1 # PID/nginx/PID/nginx . PID;#指定nginx进程运行文件的存储地址 error _ log log/error . log debug;#开发日志路径和级别。此设置可以放入全局块、http块和服务器块,级别如下:debug | info | notice | warn | error | crit | alert | emerg events { accept _ muteon;#设置网络连接序列化,防止群组报警。默认为on multi _ accept on;#设置一个进程是否可以同时接受多个网络连接。默认值为off #使用epoll#事件驱动模型,select | poll | k queue | epoll | resig |/dev/poll | Event port worker _ connections 1024;#最大连接数,默认为512 } http { include ame . types;#文件扩展名和文件类型之间的映射表 default _ type application/octet-stream;#默认文件类型,默认为text/plain # access _ log off;#取消服务日志 log _ format my format & # 39;$ remote _ addr –$ remote _ user[$ time _ local]$ request $ status $ body _ bytes _ sent $ http _ referer $ http _ user _ agent $ http _ x _ forwarded _ for & # 39;;#自定义格式 Access _ log log/Access . logmy format;#combined是日志格式 sendfile on的默认值;# sendfile模式允许传输文件,默认关闭,可用于http块、服务器块和位置块。 sendfile _ max _ chunk 100k;#每个进程每次调用的转移次数不能大于设定值,默认值为0,即没有上限。 keepalive _ time out 65;#连接超时,默认为75s,可以在http、服务器和位置块中找到。 上游mysvr { 服务器127 . 0 . 0 . 1:7878; 服务器192.168.10.121:3333备份;#热备用 } Error _ page 404 httpS://www.baidu.com;#错误页面 服务器{ keep alive _ requests 120;#单个连接请求的最大数量。 听4545;#监听端口 server _ name 127 . 0 . 0 . 1;#监听地址 位置~ *。+$ {# url过滤和常规匹配,~区分大小写,~ *不区分大小写。 #根路径;#根目录 #索引vv . txt;#设置默认页面 proxy _ pass http://mysvr;#请求到mysvr deny 127.0.0.1定义的服务器列表;#拒绝的ip 允许172 . 18 . 5 . 54;#允许的ip } } }以上是nginx的基本配置,需要注意以下几点:
1.1.$remote_addr和$http_x_forwarded_for用于记录客户端的ip地址;2.$remote_user:用于记录客户端用户名;3.$time_local:用于记录访问时间和时区;4.$request:用于记录请求的url和http协议;
5.$status:用于记录请求状态;对,200,6。$ 6.$body_bytes_s ent:记录发送给客户端的文件体的内容大小;7.$http_referer:用于记录来自该页面链接的访问;8.$http_user_agent:记录客户端浏览器的相关信息;
2.惊奇现象:当一个网络连接到达时,很多休眠的进程被同事唤醒,但只有一个进程可以获得链接,这会影响系统性能。
3.每条指令必须以分号结束。
回到目录
nginx+ftp搭建图片服务器(Windows Server服务器环境下)几个镜像服务器的比较
1.直接使用ftp服务器,访问图片路径为FTP://account:password @ 192 . 168 . 0 . 106/31275-105 . jpg。
没有这种方式,很容易因为不安全而暴露ftp账号信息。
2.在项目中直接使用IIS或Tomcat服务器访问,图片少的情况可以考虑。网站不能,图片访问处理需要搭建图片服务器。
3.ftp+nginx服务器,ftp负责上传图片,nginx负责访问图片。
一、所需组件
1.ftp服务器(上传图片,本文选用IIS作为容器)
ps Linux操作系统可以安装vsftpd作为服务器。
2.nginx服务器
A.http服务:nginx可以用作静态资源服务器。也可以用apache。建议使用Nginx以获得更高的效率。
b、反向代理实现负载均衡
二。nginx服务器的部署
Nginx下载地址http://nginx.org/en/download.html
解压安装包,不安装运行。
Ngxcmd命令
启动nginx //启动nginx
Nginx -s停止//停止Nginx
Ngx-s重新加载//重新加载配置文件
Nginx-退出//退出Nginx
Nginx -t //检查配置文件是否正确。
Nginx -v //检查Nginx的版本号
1。配置端口号和访问路径
conf目录中的Nginx.conf配置文件
简介戳这个http://www.cnblogs.com/knowledgesea/p/5175711.html.
将端口号修改为9090
启动nginx返回nginx文件夹的根目录,按住shift键,点击鼠标右键,在右键菜单中选择在此打开命令窗口,输入启动nginx命令。
成功的访问
2。添加图片服务访问配置
1234location ~ .(gif|jpg|jpeg|png|bmp|swf)$ { #默认的图片路径,也是ftp上传文件存放的路径,只要后缀是以上的都会到这个路径下搜索 root C:/imgextra; }
234定位~。(gif | jpg | JPEG | png | BMP | swf) $ {#默认图像路径也是存储ftp上传文件的路径。只要后缀在上面,就会在这个路径下搜索根C:/img extra;}
添加后在cmd中执行nginx -s reload重新加载配置使其生效。
图片文件所在的路径
访问成功。
3。图像存储路径分析
我们先来看看大商城的图片路径。
天猫图片存储
https://gdp.aliCDN.com/imgextra/i2/1856815898/TB2QxuMuHBnpuFjSZFGXXX51pXa_!!1856815898.jpghttps://GDP . alicdn . com/img extra/I2/1856815898/TB 2 qxumuhbnpufjszfgxxxx 51 pxa _!!1856815898.jpg
JD.COM图片存储
https://img30.360buyimg.com/sku/jfs/t4816/236/2599170601/86961/b24bbc4/5902ff58Nc4ceea7c.jpghttps://img 30.360 buyimg . com/SKU/jfs/t 4816/236/2599170601/86961/b 24 BBC 4/5902 ff 58 NC 4 ceea 7 c . jpg
当当图像存储
http://img3x5.ddimg.cn/19/20/1206933175-1_x_6.jpghttp://img3x5.ddimg.cn/19/20/1206933175-1_x_6.jpg
发现为了减少业务服务器的并发访问,几乎总是使用CDN和单独的域名作为独立的镜像服务器。
关于图片服务器架构介绍戳这里。
http://blog.csdn.net/dinglang_2009/article/details/31450731
三。FTP服务的安装和使用介绍
1。在windows中安装和使用FTP服务器请参考。
http://blog.csdn.net/w1014074794/article/details/52075285
2。java将文件上传到FTP服务器工具类
所需的jar包commons-net-1.4.1.jar
https://files . cn blogs . com/files/cc Zheng-666/commons-net-1 . 4 . 1 . zip
回到目录
windows下用nginx配置https服务器1.安装nginx
启动nginx 身份验证
在浏览器中输入 localhost 访问即可,如出现以下页面,即安装成功
在浏览器中输入localhost access。如果出现以下页面,则安装成功
需要在path变量后添加%OPENSSL_HOME%。
OpenSSL gen RSA-des 3-out shidian . key 1024//shidian自己的名字 有以下效果:
Opensslreq-new-key sidian . key-out shidian . CSR XXXXXXXXX XBR Opensslreq-new-key sidian . key-out shidian . csrbr此时效果:
复制shidian.key并重命名为shidian.key.org。
OpenSSL RSA-in shidian.key.org-out shidian . key
OpenSSL x509-req-days 365-in shidian . CSR-sign key shidian . key-out shidian . CRT
C:nginxconnginx . conf xxxxxxxxxxxxxbr C:nginxconnginx . confbrustream nodejs _ _ upstream 2 { server 127 . 0 . 0 . 1:8080;#要监控的端口名称 keepalive 64; } server { listen 443 SSL; server _ name dev.kt.looklook.cn;# https配置的域名 SSL _ certificate c://nginx//SSL//shidian . CRT;#这是证书的crt文件所在的目录 SSL _ certificate _ key c://nginx//SSL//shidian . key;#这是证书密钥文件所在的目录 SSL _ session _ cache shared:SSL:1m; SSL _ session _ time out 5m; ssl_ciphers高:!阿努尔:MD5 SSL _ prefere _ server _ ciphers on; location/{ proxy _ set _ header X-Real-IP $ remote _ addr; proxy _ set _ header X-Forwarded-For $ proxy _ add _ X _ Forwarded _ For; proxy _ set _ header Host $ http _ Host; Proxy _ set _ header X-NginX-Proxy true; proxy_set_header连接& # 34;"; proxy _ http _ version 1.1; proxy _ pass http://nodejs _ _ upstream 2; } } xxxxxxxxxxbr上游节点js _ _ upstream 2 { br server 127 . 0 . 0 . 1:8080;#被监控端口的名称,我用的br keepalive 64br } brbrserver { br listen 443 sslbr dev.kt.looklook.cn服务器名称;# https配置的brbrssl _ certificate c://nginx//SSL//shidian . CRT的域名;#这是证书的crt文件所在的目录brssl _ certificate _ key c://nginx//SSL//shidian . key;#这是证书密钥文件所在的目录,brbrssl _ session _ cache shared:SSL:1m;br ssl _ session _ timeout 5mbrbr ssl_ciphers高:!阿努尔:MD5br SSL _ prefere _ server _ ciphers on;brbr location/{ br proxy _ set _ header X-Real-IP $ remote _ addr;br proxy _ set _ header X-Forwarded-For $ proxy _ add _ X _ Forwarded _ For;br proxy _ set _ header Host $ http _ Host;br Proxy _ set _ header X-NginX-Proxy true;br proxy_set_header连接& # 34;";br proxy _ http _ version 1.1br proxy _ pass http://nodejs _ _ upstream 2;Br }br}br重新启动nginx
Nginx-s reload XXXXXX XBR Nginx-s reload br配置主机文件
C: 127.0.0.1待配置dev.kt.looklook.cn #域名 XXXXXXXXX XBR C: BR127.0.0.1待配置dev.kt.looklook.cn #域名BR访问C:WindowsSystem32driversetc路径下
输入您配置的域名即可访问 xxxxxxxxxxbr输入您配置的域名即可访问br奋斗一天比一天辛苦,但一年比一年轻松;不,每天奋斗很容易,但是一年比一年难。
回到目录
Nginx httpS server配置Nginx httpS配置
配置同时支持http和httpS协议:xxxxxxxxxxbr配置同时支持http和httpS协议: server { listen 80 default backlog = 2048; #backlog:当每个网络接口接收数据包的速率快于内核处理这些数据包的速率时,允许发送到队列的最大数据包数。 监听443 ssl server _ name ssl.joy4you.com; SSL _ certificate/data/nginx/conf/server . CRT; SSL _ certificate _ key/data/nginx/conf/server _ no pwd . key; root/data/; 位置/ { 索引index.php index.html index.htm; try _ files $ uri $ uri//index . PHP?$ args } 位置~。*.(php|php5)?$ { # try _ files $ uri = 404; fastcgi _ pass 127 . 0 . 0 . 1:9000; fastcgi _ index index.php; # fastcgi _ param SCRIPT _ FILENAME $ document _ root $ fastcgi _ SCRIPT _ name; 包含fastcgi.conf } } xxxxxxxxxxbr br server { br listen 80默认backlog = 2048Br #backlog:当每个网络接口接收数据包的速率快于内核处理这些数据包的速率时,允许发送到队列的最大数据包数量。br监听443 sslbr ssl.joy4you.com服务器名称;br SSL _ certificate/data/nginx/conf/server . CRT;br SSL _ certificate _ key/data/nginx/conf/server _ no pwd . key;brbr root/data/;br地点/ {br索引index.php index.html index.htm;br try_files $uri $uri/ /index.php?$ argsbr}br位置~。*.(php|php5)?$ { br # try _ files $ uri = 404br fastcgi _ pass 127 . 0 . 0 . 1:9000;br fastcgi _ index index.php;br # fastcgi _ param SCRIPT _ FILENAME $ document _ root $ fastcgi _ SCRIPT _ name;br包含fastcgi.confBr}br}配置/data/http/使用http协议;/data/ssl/使用httpS协议:xxxxxxxxxxbr配置/data/http/使用http协议;/data/ssl/使用httpS协议: server { listen 80; server _ name 192 . 168 . 17 . 16; access _ log/data/nginx/logs/PHP . joy 4 you . com . log main; root/data/http/; 位置/ { 索引index.php index.html index.htm; try _ files $ uri $ uri//index . PHP?$ args } 位置~。*.(php|php5)?$ { # try _ files $ uri = 404; fastcgi _ pass 127 . 0 . 0 . 1:9000; fastcgi _ index index.php; # fastcgi _ param SCRIPT _ FILENAME $ document _ root $ fastcgi _ SCRIPT _ name; 包含fastcgi.conf } } server { listen 443; SSL on; SSL _ certificate/data/nginx/conf/server . CRT; SSL _ certificate _ key/data/nginx/conf/server _ no pwd . key; server _ name 192 . 168 . 17 . 16; access _ log/data/nginx/logs/PHP . joy 4 you . com . log main; root/data/SSL/; 位置/ { 索引index.php index.html index.htm; try _ files $ uri $ uri//index . PHP?$ args } 位置~。*.(php|php5)?$ { # try _ files $ uri = 404; fastcgi _ pass 127 . 0 . 0 . 1:9000; fastcgi _ index index.php; # fastcgi _ param SCRIPT _ FILENAME $ document _ root $ fastcgi _ SCRIPT _ name; 包含fastcgi.conf } } br server { br listen 80;br server _ name 192 . 168 . 17 . 16;br access _ log/data/nginx/logs/PHP . joy 4 you . com . log main;br root/data/http/;brbr地点/ {br索引index.php index.html index.htm;br try_files $uri $uri/ /index.php?$ argsbr}brbr位置~。*.(php|php5)?$ { br # try _ files $ uri = 404br fastcgi _ pass 127 . 0 . 0 . 1:9000;br fastcgi _ index index.php;br # fastcgi _ param SCRIPT _ FILENAME $ document _ root $ fastcgi _ SCRIPT _ name;br包含fastcgi.confbr } br } brbrserver { br listen 443br ssl打开;br SSL _ certificate/data/nginx/conf/server . CRT;br SSL _ certificate _ key/data/nginx/conf/server _ no pwd . key;br server _ name 192 . 168 . 17 . 16;br access _ log/data/nginx/logs/PHP . joy 4 you . com . log main;br root/data/SSL/;brbr地点/ {br索引index.php index.html index.htm;br try_files $uri $uri/ /index.php?$ argsbr}brbr位置~。*.(php|php5)?$ { br # try _ files $ uri = 404br fastcgi _ pass 127 . 0 . 0 . 1:9000;br fastcgi _ index index.php;br # fastcgi _ param SCRIPT _ FILENAME $ document _ root $ fastcgi _ SCRIPT _ name;br包含fastcgi.confBr}br}将所有访问端口80的请求转发到443(https):xxxxxxxxxxbr将所有访问端口80的请求转发到443(HTTPS): server { listen 80; server _ name 192 . 168 . 17 . 16; 重写^(.*) https://$server_name永久; } server { listen 443; SSL on; SSL _ certificate/data/nginx/conf/server . CRT; SSL _ certificate _ key/data/nginx/conf/server _ no pwd . key; server _ name 192 . 168 . 17 . 16; access _ log/data/nginx/logs/PHP . joy 4 you . com . log main; root/data/; 位置/ { 索引index.php index.html index.htm; try _ files $ uri $ uri//index . PHP?$ args } 位置~。*.(php|php5)?$ { # try _ files $ uri = 404; fastcgi _ pass 127 . 0 . 0 . 1:9000; fastcgi _ index index.php; # fastcgi _ param SCRIPT _ FILENAME $ document _ root $ fastcgi _ SCRIPT _ name; 包含fastcgi.conf } } # fastcgi _ param SCRIPT _ FILENAME $ document _ root $ fastcgi _ SCRIPT _ name;
使用Worton的CA证书,他们推荐https配置:[/s2/]服务器{ 监听443; server_name本地主机; #打开服务器的ssl支持 SSL on; #指定虚拟主机的pem格式证书文件 SSL _ certificate/home/王振义/SSL/wangzhenyi . CRT; #指定虚拟主机的私钥文件 SSL _ certificate _ key/home/王振义/SSL/王振义_ no pass . key; #客户端可以重用缓存中存储的会话参数time SSL _ session _ time out 5m; #指定使用的ssl协议 SSL _ Protocols TLS V1 TLSV 1.1 TLSV 1.2; #指定许可证的密码描述 ssl_ciphers ALL:!ADH:!出口56:-RC4+RSA:+高:+中:!EXP #ssl_ciphers ALL:!ADH:!export 56:-RC4+RSA:+高:+中:-EXP; # SSL v3和TLSv1协议的服务器密码需求优先级高于客户端密码 SSL _ prefere _ server _ cipher on;SSL _ certificate _ key/home/王正一/SSL/王正一_ no pass . key;SLL参数:
ssl_session_timeout 5m; ##设置客户端能够反复使用储存在缓存中的会话参数时间。 ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ##指定要开启的SSL协议。 ssl_ciphers ALL:!ADH:!EXPORT56:-RC4+RSA:+HIGH:+MEDIUM:!EXP; ##指出为建立安全连接,服务器所允许的密码格式列表,密码指定为OpenSSL支持的格式 ssl_prefer_server_ciphers on; ##依赖SSLv3和TLSv1协议的服务器密码将优先于客户端密码.
ssl_ciphers ALL:!ADH:!EXPORT56:-RC4+RSA:+HIGH:+MEDIUM:!EXP; ##指出为建立安全连接,服务器所允许的密码格式列表,密码指定为OpenSSL支持的格式