nginx跨域解决方案

nginx跨域解决方案
Access to Font at ‘http://47.104.86.187/yinjiatoupiao2/iconfont/iconfont.woff’ from origin ‘http://wxserver.knowway.cn’ has been blocke

改nginx.conf

http
    {
       .....
		  add_header Access-Control-Allow-Origin *;
  add_header Access-Control-Allow-Headers X-Requested-With;
  add_header Access-Control-Allow-Methods GET,POST,OPTIONS;

.....

nginx recv() failed (104: Connection reset by peer) while reading response header from upstream解决方法

首先说下 先看 按照ab 每秒请求的结果 看看 都有每秒能请求几个 如果并发量超出你请求的个数 会这样 所以一般图片和代码服务器最好分开 还有看看io瓶ding 和有没有延迟的PHP代码执行

0 先修改内核参数

1、调整同时打开文件数量

ulimit -n 20480
2、TCP最大连接数(somaxconn)

echo 10000 > /proc/sys/net/core/somaxconn
3、TCP连接立即回收、回用(recycle、reuse)

echo 1 > /proc/sys/net/ipv4/tcp_tw_reuse
echo 1 > /proc/sys/net/ipv4/tcp_tw_recycle
4、不做TCP洪水抵御

echo 0 > /proc/sys/net/ipv4/tcp_syncookies

也可以直接使用优化后的配置,在/etc/sysctl.conf中加入:

net.core.somaxconn = 20480
net.core.rmem_default = 262144
net.core.wmem_default = 262144
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_rmem = 4096 4096 16777216
net.ipv4.tcp_wmem = 4096 4096 16777216
net.ipv4.tcp_mem = 786432 2097152 3145728
net.ipv4.tcp_max_syn_backlog = 16384
net.core.netdev_max_backlog = 20000
net.ipv4.tcp_fin_timeout = 15
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_max_orphans = 131072
net.ipv4.tcp_syncookies = 0

然后修改nginx.conf 比如worker_processes等等

1 查看nginx错误日记 error.log日志得到connect() to unix:/tmp/php-cgi.sock failed xxxxx……..
如果是因为突然的网站访问量大(这里说明这个是说tcp过高,并不能说明cpu过高和内存使用率过高,带宽过高)导致那么一般是因为子进程数不足:
到php-fpm.conf找到max_children也就是子进程最大数改为:128

2

 tail -n 10 /var/log/messages


Dec  1 15:33:31 iZ238qupob7Z kernel: TCP: time wait bucket table overflow
Dec  1 15:33:31 iZ238qupob7Z kernel: TCP: time wait bucket table overflow
Dec  1 15:33:31 iZ238qupob7Z kernel: TCP: time wait bucket table overflow
Dec  1 15:33:31 iZ238qupob7Z kernel: TCP: time wait bucket table overflow
Dec  1 15:33:31 iZ238qupob7Z kernel: TCP: time wait bucket table overflow
Dec  1 15:33:31 iZ238qupob7Z kernel: TCP: time wait bucket table overflow
Dec  1 15:33:31 iZ238qupob7Z kernel: TCP: time wait bucket table overflow
Dec  1 15:33:32 iZ238qupob7Z kernel: TCP: time wait bucket table overflow
Dec  1 15:33:32 iZ238qupob7Z kernel: TCP: time wait bucket table overflow
Dec  1 15:33:32 iZ238qupob7Z kernel: TCP: time wait bucket table overflow

time wait bucket table overflow 这种代表 服务器的TCP连接数,超出了内核定义最大数

查看当前的内核定义最大数

 cat  /proc/sys/net/ipv4/tcp_max_tw_buckets 
解决方法:
修改内核参数 /proc/sys/net/ipv4/tcp_max_tw_buckets
# echo 30000 > /proc/sys/net/ipv4/tcp_max_tw_buckets
写入/etc/sysctl.conf使之永久生效
echo 'net.ipv4.tcp_max_tw_buckets = 30000' >> /etc/sysctl.conf && sysctl -p

3 当然也有可能PHP代码 消耗太多CPU 执行时间过长 将采取如下方法 看看里面的错误连接的链接是不是请求时间过长

nginx recv() failed (104: Connection reset by peer) while reading response header from upstream解决方法 除了升级服务器配置还有以下方法可以参考下

request_terminate_timeout = 0//这样 就不怕了 之前是PHP执行时间因为超过了设置的值所以报错 这个时候需要重启php-fpm 或者等他自己重启时间相当漫长
还有另外设置下PHP限制执行时间 设置2秒即可 超过2秒就直接报错让用户不要继续访问了 就不影响服务器性能了

max_execution_time = 10; 

比如像导出excel耗时的 在代码中加

set_time_limit(0);

ps:可以开启慢查询日记 PHP执行超过1秒的记录下

slowlog = /data/logs/php-fpm.log.slow
request_slowlog_timeout = 6

4 如果以上都不行 图片都用CDN 或者就直接再买个服务器负载均衡就好了 买1个星期的 估计能抗几下

复制ecs实例的方法
1、系统盘
通过创建自定义镜像的方式,创建一个自定义镜像,然后使用这个自定义镜像创建ECS即可。
http://help.aliyun.com/knowledge_detail.htm?spm=5176.7114037.1996646101.1.uamHK9&categoryId=8314847&knowledgeId=5974456&pos=1

2、数据盘
对已经配置完成的数据盘进行打快照。
然后在购买或者升级页面,添加磁盘的地方点:“用快照创建磁盘”,选择你要的快照即可。

nginx 出现413 Request Entity Too Large问题的解决方法

nginx 出现413 Request Entity Too Large问题的解决方法

使用PHP上传图片(大小1.9M),出现 nginx: 413 Request Entity Too Large 错误。
根据经验是服务器限制了上传文件的大小,但php默认的文件上传是2M,应该不会出现问题。

打开php.ini,把 upload_max_filesize 和 post_max_size 修改为20M,然后重启。
再次上传,问题依旧,可以排除php方面的问题。

原来nginx默认上传文件的大小是1M,可nginx的设置中修改。

解决方法如下:
1.打开nginx配置文件 nginx.conf
2.在http{}段中加入 client_max_body_size 20m; 20m为允许最大上传的大小。
3.保存后重启nginx,问题解决。

nginx实现负载均衡

nginx实现负载均衡 几台服务器都可以用服务器镜像就可以了 这样就可以保持一致了

在http段加入以下代码: ps:默认 权重是平均分配的

upstream servers.mydomain.com { 
    server 192.168.2.3:80; 
    server 192.168.2.4:80; 
    server 192.168.2.5:80;
}

当然嘛,这servers.mydomain.com随便取的。

那么PA的server配置如下:
在http段加入以下代码:

server{ 
    listen 80; 
    server_name www.mydomain.com; 
    location / { 
        proxy_pass http://servers.mydomain.com; 
        proxy_set_header Host $host; 
        proxy_set_header X-Real-IP $remote_addr; 
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    } 
}  

那么P1、P2、P3的配置如下:

server{ 
    listen 80; 
    server_name www.mydomain.com; 
    index index.html; 
    root /data/htdocs/www; 
}

nginx配置优化提高并发量

1 nginx配置优化提高并发量

worker_processes 2;
这个按照CPU的核数来决定

2 worker_connections 65535;
这个一般设置65535即可 每个进程允许的最多连接数, 理论上每台nginx 服务器的最大连接数为worker_processes*worker_connections。

3 keepalive_timeout 60;
keepalive 设置超时时间 一般设置60

4. use epoll;
使用epoll 的I/O 模型

nginx yaf需要注意的问题

nginx yaf需要注意的问题

显示视图的方法

 $this->getView()->assign(array('pack'=>$return['pack'],'appid'=>$return['appid']));
        $this->display('index');

nginx配置文件

  index  index.php index.html index.htm;

           if (!-e $request_filename) {
           rewrite ^/(.*) /index.php?$1 last;
           }

官方文档是错的 这里修复下

ps:还有控制器和文件夹名字不要一样 不然访问优先访问文件夹 然后再访问控制器的

nginx开启gzip的方法

nginx开启gzip的方法

1、vi打开Nginx配置文件

vi /usr/local/nginx/conf/nginx.conf

2、找到如下一段,进行修改

gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
#gzip_http_version 1.0;
gzip_comp_level 2;
gzip_types text/plain application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png application/javascript;
gzip_vary off;
gzip_disable "MSIE [1-6]\.";

3、解释一下

第1行:开启Gzip

第2行:不压缩临界值,大于1K的才压缩,一般不用改

第3行:buffer,就是,嗯,算了不解释了,不用改

第4行:用了反向代理的话,末端通信是HTTP/1.0,有需求的应该也不用看我这科普文了;有这句的话注释了就行了,默认是HTTP/1.1

第5行:压缩级别,1-10,数字越大压缩的越好,时间也越长,看心情随便改吧

第6行:进行压缩的文件类型,缺啥补啥就行了,JavaScript有两种写法,最好都写上吧,总有人抱怨js文件没有压缩,其实多写一种格式就行了

第7行:跟Squid等缓存服务有关,on的话会在Header里增加”Vary: Accept-Encoding”,我不需要这玩意,自己对照情况看着办吧

第8行:IE6对Gzip不怎么友好,不给它Gzip了

4、:wq保存退出,重新加载Nginx

/usr/local/nginx/sbin/nginx -s reload

5 测试的时候 直接去谷歌浏览器 network里面看 可以实际传到客户端的的文件都被压缩过的
ps:查看Content-Encoding 这个有没有gizp就知道有没有压缩了 注意Accept-Encoding这个是客户端支持的压缩类型 并不是服务器压缩的类型 如果看到有些文件没有被gzip压缩 那就是把该文件的Content-Type添加到 gzip_types 即可

使用socket方式连接nginx优化php-fpm性能

下面是php 5.3以上版本将TCP改成socket方式的配置方法:
修改php-fpm.conf(/usr/local/php/etc/php-fpm.conf)

;listen = 127.0.0.1:9000
listen = /dev/shm/php-cgi.sock

修改nginx配置文件server段的配置,将http的方式改为socket方式

location ~ [^/]\.php(/|$) {
    #fastcgi_pass 127.0.0.1:9000;
    fastcgi_pass unix:/dev/shm/php-cgi.sock;
    fastcgi_index index.php;
    include fastcgi.conf;
}

重启php-fpm与nginx

service nginx restart
service php-fpm restart
ls -al /dev/shm

可以看到php-cgi.sock文件unix套接字类型

#切记每次重启php-fpm要吧 php-cgi.sock设置777权限  
chmod -R 777 /dev/shm

ps:你可以发现没有9000端口找不到php-fpm了