NGINX 中添加 SSL 证书

打开 NGINX 配置文件,在其中的 server { … } 段中,添加下面内容:

ssl on;
ssl_certificate /path/to/your/crt/file;
ssl_certificate_key /path/to/your/key/file;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;

修改完之后,重启 NGINX 服务:

systemctl restart nginx

NGINX + PHP-FPM 优化记录

最近做的 NGINX + PHP-FPM 优化,记录一下,留待后用。

测试环境,8 核 CPU,64G 内存。

1、PHP-FPM 配置文件

listen = 127.0.0.1:9000 修改为 listen = /tmp/php-fpm.sock
listen.backlog 取消注释,并修改值为 102400
pm = dynamic 修改为 pm = static
pm.max_children 的值修改为 200

2、启动多个 PHP-FPM 实例

复制 php-fpm.conf 配置文件

cp php-fpm.conf php-fpm.1.conf

修改复制的 php-fpm.1.conf

listen = /tmp/php-fpm.sock 修改为 listen = /tmp/php-fpm.1.sock

建议启动的 PHP-FPM 实例数量与 CPU 核心数量一致。

3、NGINX 配置文件

worker_processes 8;
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;
worker_rlimit_nofile 204800;
events {
    use epoll;
    worker_connections 204800;
}
upstream phpbackend {
    server unix:/tmp/php-fpm.sock
    server unix:/tmp/php-fpm.1.sock
}
server {
    default backlog = 102400;
    location ~ .php$ {
        fastcgi_pass   phpbackend;
        include        fastcgi_params;
    }
}

4、修改系统打开文件数

打开 /etc/security/limits.conf 文件,添加:

* soft nofile 65535
* hard nofile 65535

修改完成需要重启服务器生效!并可使用下面命令查看是否生效:

ulimit -n

PHP + Nginx上传大文件

PHP默认支持上传2M大小的文件,可大部分时间我们可能需要支持上传超过2M,甚至20M或更大的文件。这就需要我们通过修改PHP的配置文件php.ini来达到目的。

file_uploads = On;            ; 打开PHP上传文件开关
upload_max_filesize = 500M;   ; 上传文件大小上限
post_max_size = 500M;         ; POST表单提交文件大小上限
max_execution_time = 1800;    ; PHP脚本执行超时时间
max_input_time = 1800;        ; PHP脚本接受POST、GET或PUT提交的超时时间
memory_limit = 128M;          ; 使用内存上限

好了,不过你以为改了这些,就可以上传大文件了?

你还需要修改nginx的配置文件nginx.conf,修改nginx允许客户端上传的最大文件限制。

在nginx.conf的http{}段,添加或修改下面代码:

client_max_body_size 500M;    ; 具体大小根据实际需要调整
;keepalive_timeout 62;        ; 如果有条件的话,也可以修改一下,可以避免上传过程中出现timeout

现在才是真正的好了,你可以向服务器上传大文件了!

在Nginx上配置PATH_INFO方式访问

最近配置NGINX,由于开发框架需要用到PATH_INFO,所以要在NGINX上配置PATH_INFO,记录一下,留备后用。

修改站点配置文件:

location / {
	try_files $uri $uri/ /index.php$uri?$args;
}

location ~ .php {
	include fastcgi_params;
	fastcgi_pass 127.0.0.1:9000;
}

修改fastcgi_param文件:

fastcgi_split_path_info ^(.+.php)(/.+)$;
fastcgi_index index.php;

fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param REQUEST_URI $request_uri;
fastcgi_param DOCUMENT_URI $document_uri;
fastcgi_param DOCUMENT_ROOT $document_root;
fastcgi_param SERVER_PROTOCOL $server_protocol;
fastcgi_param HTTPS $https if_not_empty;

fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;

fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;

# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param REDIRECT_STATUS 200;

编译Apache + php

今天在测试服务器上编译apache + php5.4,总是记不住Apache + php的编辑参数,在这里记录一下,留着以后查看。

Apache

$ ./configure --prefix=/usr/local/httpd --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util
$ make 
$ sudo make install

PHP

$ ./configure --prefix=/usr/local/php --with-apxs2=/usr/local/httpd/bin/apxs --with-config-file-path=/usr/local/php/etc --enable-pdo -with-pdo-mysql
$ make 
$ sudo make install

安装好之后,需要设置一下PHP解析器解析的文件扩展名。

AddType application/x-httpd-php .php

利用反向代理实现SAE的域名绑定

在NGINX中配置文件中添加下面代码:

server
{
    listen 80;
    server_name xxx.ixcv.com
    location / {
        proxy_redirect off;
        proxy_pass http://xxx.sinaapp.com/;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

或:

在APACHE服务器上 xxx.ixcv.com 主机的 .htaccess 文件中添加下面代码:

RewriteEngine On
RewriteBase /
RewriteRule ^(.*)$ http://xxx.sinaapp.com/$1 [P]

代码添加完成后,将域名 xxx.ixcv.com 解析到你的主机上,并重启你的服务,就OK了!

Enjoy it !

查看apache,php等编辑参数

有时候nginx,apache,mysql,php编译完了想看看编译参数可以用以下方法 nginx编译参数:

#/usr/local/nginx/sbin/nginx -V
nginx version: nginx/0.6.32 built by gcc 4.1.2 20071124 (Red Hat 4.1.2-42) configure arguments: –user=www –group=www –prefix=/usr/local/nginx/ –with-http_stub_status_module –with-openssl=/usr/local/openssl

apache编译参数:

# cat /usr/local/apache2/build/config.nice
#! /bin/sh # # Created by configure "./configure" "–prefix=/usr/local/apache2″ "–with-included-apr" "–enable-so" "–enable-deflate=shared" "–enable-expires=shared" "–enable-rewrite=shared" "–enable-static-support" "–disable-userdir" "$@"

php编译参数:

# /usr/local/php/bin/php -i |grep configure
Configure Command =>'./configure' '–prefix=/usr/local/php' '–with-apxs2=/usr/local/apache2/bin/apxs' '–with-config-file-path=/usr/local/php/etc' '–with-mysql=/usr/local/mysql' '–with-libxml-dir=/usr/local/libxml2/bin' '–with-gd=/usr/local/gd2′ '–with-jpeg-dir' '–with-png-dir' '–with-bz2′ '–with-xmlrpc' '–with-freetype-dir' '–with-zlib-dir'

mysql编译参数:

# cat “/usr/local/mysql/bin/mysqlbug”|grep configure
# This is set by configure CONFIGURE_LINE=”./configure '–prefix=/usr/local/mysql' '–localstatedir=/var/lib/mysql' '–with-comment=Source' '–with-server-suffix=-H863′ '–with-mysqld-user=mysql' '–without-debug' '–with-big-tables' '–with-charset=gbk' '–with-collation=gbk_chinese_ci' '–with-extra-charsets=all' '–with-pthread' '–enable-static' '–enable-thread-safe-client' '–with-client-ldflags=-all-static' '–with-mysqld-ldflags=-all-static' '–enable-assembler' '–without-isam' '–without-innodb' '–without-ndb-debug'”

“反向代理”及“反向代理服务器”

反向代理就是网站通过一台服务器发布到公网,供用户访问。用户直接访问那台反向代理服务器,然后通过那台服务器访问到网站。用户无法得到网站的真实IP地 址。这样就保护了网站服务器,如果您有台服务器在国内又不想让人找到IP,就可以在国外搭建一台反向代理服务器。一个反向代理服务器将很多网站解析到同一 ip地址上。(通俗讲法)

技术讲法,普通的Web代理服务器是不支持外部对内部网络的访问请求的。当一个代理服务器能够代理外部网络上的主机,访问内部网络时,这种代理服务的方式称为反向代理服务 。此时的代理服务器称为反向代理服务器 , 对外表现为一个Web服务器,外部网络就可以简单把它当作一个标准的Web服务器而不需要特定的配置。不同之处在于,这个服务器没有保存任何网页的真实数 据,所有的静态网页或者CGI程序,都保存在内部的Web服务器上。因此对反向代理服务器的攻击并不会使得网页信息遭到破坏,这样就增强了Web服务器的 安全性。