阿里云
阿里云多端小程序中小企业获客首选
发表主题 回复主题
  • 8815阅读
  • 5回复

[基础常识]加速吧 - Nginx 的优化收集

级别: 论坛版主
发帖
9349
云币
14165
;_lEu" -  
eswsxJ/!  
前言 l ^*GqP5  
<<da TQV  
/QsFeH  
由于目前 LNMP 环境很火爆而且也很简单,一键包和安装教程也都很丰富,所以我们这里先讲讲 Nginx 的优化。 Xh/i5}5 t  
w`vJE!4B  
内容 RrkS!E[C  
*JX)q  
  1. 版本越高越好,不要现在已经 1.10.x 的时代了,你还在 1.0.x 徘徊,偶数位是稳定版例如:1.8,奇数是测试版,例如:1.9
  2. 使用 socket 方式连接 php-fpm
  3. 如果 Nginx 用于反代无论是类似内网 Tomcat、Node.js 还是外网谷歌不要简单几句反代代码,去搜索一下,还可以加缓存什么的优化性能
  4. 有实力的就申请一个证书上 HTTP/2 ,获得更佳的阅读体验和安全性还有速度
  5. 开启 Gzip 压缩
7)IB IlV  
kN4nRW9z  
衍生版 e'oM% G[  
n2Oi< )  
IPU'M*|Q  
Nginx 方面淘宝、Cloudflare 都是是利用大户,因此它们的代码贡献也是不小,对于 Nginx 的贡献也是不小,而且它们也有己的 Nginx 修改版。
  1. Tengine |淘宝和搜狗能企业一起干出来的,非常不错的衍生版,可玩性大。
  2. Openresty | 前淘宝员工,现 Cloudflare 员工章亦春的衍生版,功能强大。
  3. SEnginx |  基于 Tengine 的安全衍生版
W%f:+s}cI  
L)'JkX J  
Rla4XN=mf  
v2dCkn /  
来自:https://www.vobe.io/378 n<p`OKIV3  
[ 此帖被ivmmff在2015-10-14 22:14重新编辑 ]
级别: 论坛版主
发帖
9349
云币
14165
只看该作者 沙发  发表于: 2015-10-14
内核优化 )dMXn2O  
s.8]qQRr  
iax6o+OG|  
编辑  /etc/sysctl.conf r'GD  
  1. net.ipv4.ip_forward = 0
  2. net.ipv4.conf.default.rp_filter = 1
  3. net.ipv4.conf.default.accept_source_route = 0
  4. kernel.sysrq = 0
  5. kernel.core_uses_pid = 1
  6. net.ipv4.tcp_syncookies = 1
  7. kernel.msgmnb = 65536
  8. kernel.msgmax = 65536
  9. kernel.shmmax = 68719476736
  10. kernel.shmall = 4294967296
  11. net.ipv4.tcp_max_tw_buckets = 6000
  12. net.ipv4.tcp_sack = 1
  13. net.ipv4.tcp_window_scaling = 1
  14. net.ipv4.tcp_rmem = 4096 87380 4194304
  15. net.ipv4.tcp_wmem = 4096 16384 4194304
  16. net.core.wmem_default = 8388608
  17. net.core.rmem_default = 8388608
  18. net.core.rmem_max = 16777216
  19. net.core.wmem_max = 16777216
  20. net.core.netdev_max_backlog = 262144
  21. net.core.somaxconn = 262144
  22. net.ipv4.tcp_max_orphans = 3276800
  23. net.ipv4.tcp_max_syn_backlog = 262144
  24. net.ipv4.tcp_timestamps = 0
  25. net.ipv4.tcp_synack_retries = 1
  26. net.ipv4.tcp_syn_retries = 1
  27. net.ipv4.tcp_tw_recycle = 1
  28. net.ipv4.tcp_tw_reuse = 1
  29. net.ipv4.tcp_mem = 94500000 915000000 927000000
  30. net.ipv4.tcp_fin_timeout = 1
  31. net.ipv4.tcp_keepalive_time = 30
  32. net.ipv4.ip_local_port_range = 1024 65000
N)&(&2  
`O'@TrI  
再输入 /sbin/sysctl -p 使其生效 [tP6FdS/M=  
yE80*C~d  
Conf 设置 UyWKE<  
)HFl 0[vT  
  1. worker_processes 2 # 2 就是服务器的核心数
  2. worker_cpu_affinity 01 10 # 填法和服务器的线程数相关,一般云服务器/vps 线程和核心数是一致的,具体写法不展开。
{TWgR2?{C  
w{HDCPuS  
如果是 tengine 的话,后面直接填 auto 即可。 I {o\d'/  
/P8`)?f~y  
<r1N6(n  
  1. worker_connections  #用高效的event驱动,可以获得最大性能
!:7aXT*D$  
'h:[[D%H`  
其他的参数最好根据你的服务器配置进行调整,以避免 502 的产生。 sXmZ0Dv  
G|"`kAa  
TCP 优化 'B$ bGQ  
@6~OQN  
%L^S;v3  
<> &!+|#  
  1. http {
  2. sendfile on;
  3. tcp_nopush on;
  4. tcp_nodelay on;
  5. keepalive_timeout 60;
5nhc|E)C  
.-0;:>  
第一行的 sendfile 配置可以提高 Nginx 静态资源托管效率。sendfile 是一个系统调用,直接在内核空间完成文件发送,不需要先 read 再 write,没有上下文切换开销。 luEP5l2&  
TCP_NOPUSH 是 FreeBSD 的一个 socket 选项,对应 Linux 的 TCP_CORK,Nginx 里统一用 tcp_nopush 来控制它,并且只有在启用了 sendfile 之后才生效。启用它之后,数据包会累计到一定大小之后才会发送,减小了额外开销,提高网络效率。 *"% MT:  
TCP_NODELAY 也是一个 socket 选项,启用后会禁用 Nagle 算法,尽快发送数据,可以节约 200ms。Nginx 只会针对处于 keep-alive 状态的 TCP 连接才会启用 tcp_nodelay。 BU|bo")  
[ 此帖被ivmmff在2015-10-14 22:17重新编辑 ]
级别: 论坛版主
发帖
9349
云币
14165
只看该作者 板凳  发表于: 2015-10-14
M~T.n)x2  
mXWTm%'[  
Socket 连接 php-fpm |PVt}*0"  
 :S %lv  
-C7FuD[Xw  
修改 php-fpm.conf zri} h/{  
  1. listen = 127.0.0.1:9000
  2. 改为
  3. listen = /dev/shm/php-cgi.sock
B\`Aojw"E?  
修改 nginx.conf 7LZ^QC  
  1. location ~ .*\.(php|php5)?$ {
  2. #fastcgi_pass 127.0.0.1:9000;
  3. fastcgi_pass unix:/dev/shm/php-cgi.sock;
  4. fastcgi_index index.php;
  5. include fastcgi.conf;
  6. }
tV;% J4E'  
0&Gl@4oZ"  
事后不要忘记重启就好。 x ,/TXTZ6  
j#A%q"]8  
反代优化 m 40m<@  
;]D(33) (  
j} HFs0<L  
Nginx 安装时,或者升级时编译 ngxcachepurge 组件 MEZ{j%-a  
以反代 Node.js 应用 Ghost 为例: H. ,;-  
  1. server {  
  2.    server_name domain.com;
  3.    add_header X-Cache $upstream_cache_status;
  4.    location / {
  5.         proxy_cache STATIC;
  6.         proxy_cache_valid 200 30m;
  7.         proxy_cache_valid 404 1m;
  8.         proxy_pass http://127.0.0.1:2368;
  9.         proxy_ignore_headers X-Accel-Expires Expires Cache-Control;
  10.         proxy_ignore_headers Set-Cookie;
  11.         proxy_hide_header Set-Cookie;
  12.         proxy_hide_header X-powered-by;
  13.         proxy_set_header X-Real-IP $remote_addr;
  14.         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  15.         proxy_set_header Host $http_host;
  16.         expires 10m;
  17.     }
  18.     location /content/images {
  19.         alias /path/to/ghost/content/images;
  20.         access_log off;
  21.         expires max;
  22.     }
  23.     location /assets {
  24.         alias /path/to/ghost/content/themes/uno-master/assets;
  25.         access_log off;
  26.         expires max;
  27.     }
  28.     location /public {
  29.         alias /path/to/ghost/core/built/public;
  30.         access_log off;
  31.         expires max;
  32.     }
  33.     location /ghost/scripts {
  34.         alias /path/to/ghost/core/built/scripts;
  35.         access_log off;
  36.         expires max;
  37.     }
  38.     location ~ ^/(?:ghost|signout) {
  39.         proxy_set_header X-Real-IP $remote_addr;
  40.         proxy_set_header Host $http_host;
  41.         proxy_pass http://127.0.0.1:2368;
  42.         add_header Cache-Control "no-cache, private, no-store, must-revalidate, max-stale=0, post-check=0, pre-check=0";
  43.     }
  44. }
#} ,x @]p  
nn~YK  
~Vh=5J~  
4 2) mM#  
HTTP/2 + 优化 ReB7vpd  
T`YwJ6N  
H -t|i  
因为 Nginx 稳定支持HTTP/2 的 1.10 版本还没有出,所以暂时不写。 c-]fKj7  
可以先参考 SPDY:或许是 Nginx 下 SPDY 配置最实际的教程 O_,O,1  
[uuj?Rbd  
开启 Gzip '"YYj$> '  
>=,ua u7  
3x*z\VJ  
对于文本文件,在服务端发送响应之前进行 GZip 压缩也很重要,通常压缩后的文本大小会减小到原来的 1/4 - 1/3。 D9ufoa&ua  
  1. http {
  2. gzip on;
  3. gzip_vary on;
  4. gzip_comp_level 6;
  5. gzip_buffers 16 8k;
  6. gzip_min_length 1000;
  7. gzip_proxied any;
  8. gzip_disable "msie6";
  9. gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript;
  10. ... ...
  11. }
93%{scrm  
D#rrW?-z  
5>0.NiXGf'  
PageSpeed ! >.vh]8g  
x-m/SI]_N  
Q4'C;<\@(Q  
kEN#u  
'&yg {n  
谷歌推出的很好很强大的优化软件,由于篇幅有限,所以请自行搜索安装教程 :- +4:S  
Utl t<  
I<\ '%  
来自:https://www.vobe.io/378
级别: 布道狮
发帖
2103
云币
2754
只看该作者 地板  发表于: 2015-10-14
谷歌的链接无法访问。
级别: 论坛版主
发帖
3414
云币
8980

只看该作者 4楼 发表于: 2015-10-16
O(∩_∩)O哈哈~  有空尝试一下
级别: 新人
发帖
10
云币
20
只看该作者 5楼 发表于: 2016-01-12
Re加速吧 - Nginx 的优化收集
抛开硬件配置谈优化都是流氓
发表主题 回复主题
« 返回列表上一主题下一主题

限100 字节
批量上传需要先选择文件,再选择上传
 
验证问题: 阿里云官网域名是什么? 正确答案:www.aliyun.com
上一个 下一个
      ×
      全新阿里云开发者社区, 去探索开发者的新世界吧!
      一站式的体验,更多的精彩!
      通过下面领域大门,一起探索新的技术世界吧~ (点击图标进入)