Nginx(发音同engine x)是一款由俄罗斯程序员Igor Sysoev所开发轻量级的网页服务器、反向代理服务器以及电子邮件(IMAP/POP3)代理服务器。起初是供俄国大型的门户网站及搜索引擎Rambler(俄语:Рамблер)使用。此软件在BSD-like协议下发行,可以在UNIX、GNU/Linux、BSD、Mac OS X、Solaris,以及Microsoft Windows等操作系统中运行。因它的高性能、稳定性、丰富的特性、简单方便的配置和低系统资源的消耗而闻名。因其占有内存少,并发能力强等众多优点,广受各大门户网站的喜爱。中国大陆使用nginx网站用户有:新浪、网易、腾讯等。下图是netcraft网站统计的在所有领域的顶级服务器市场份额的相关信息,通过该图,我们可以对nginx有个初步的了解。
Nginx 是一个很强大的高性能Web和反向代理服务器,它具有很多非常优越的特性:
在高连接并发的情况下,Nginx是Apache服务器不错的替代品:Nginx在美国是做虚拟主机生意的老板们经常选择的软件平台之一。能够支持高达 50,000 个并发连接数的响应。
Nginx作为负载均衡服务器:Nginx 既可以在内部直接支持 Rails 和 PHP 程序对外进行服务,也可以支持作为 HTTP代理服务器对外进行服务。Nginx采用C进行编写,不论是系统资源开销还是CPU使用效率都比 Perlbal 要好很多。
作为邮件代理服务器:Nginx 同时也是一个非常优秀的邮件代理服务器(最早开发这个产品的目的之一也是作为邮件代理服务器)。
Nginx 是一个安装非常的简单,配置文件非常简洁(还能够支持perl语法),Bugs非常少的服务器:Nginx 启动特别容易,并且几乎可以做到7*24不间断运行,即使运行数个月也不需要重新启动。你还可以再不间断服务的情况下进行软件版本的升级。
nginx可以做网页服务器,反向代理服务器,同时还可以做电子邮件代理服务器,这里我们主要介绍其网页服务器,其他服务器特性这里暂不介绍。
多进程:每个进程响应一个请求
进程量大,进程切换次数过多
每个进程的地址空间是独立的,很多空间是重复的数据,所以内存使用效率较低
线程:每个线程响应一个请求,但因linux对线程支持不够,故
线程依然需要切换:切换较之进程属于轻量级切换
同一个进程的线程可以共享进程的诸多资源,比如打开的文件
对内存的需求较之进程略有下降
快速切换时会带来线程抖动
在设计的最初阶段,nginx的主要着眼点就是其高性能以及对物理计算资源的高密度利用,因此其采用了不同的架构模型。受启发于多种操作系统设计中基于“事件”的高级处理机制,nginx采用了模块化、事件驱动、异步、单线程及非阻塞的架构,并大量采用了多路复用及事件通知机制。在nginx中,连接请求由为数不多的几个仅包含一个线程的进程worker以高效的回环(run-loop)机制进行处理,而每个worker可以并行处理数千个的并发连接及请求。
主进程主要完成如下工作:
1. 读取并验正配置信息;
2. 创建、绑定及关闭套接字;
3. 启动、终止及维护worker进程的个数;
4. 无须中止服务而重新配置工作特性;
5. 控制非中断式程序升级,启用新的二进制程序并在需要时回滚至老版本;
6. 重新打开日志文件,实现日志滚动;
7. 编译嵌入式perl脚本;
worker进程主要完成的任务包括:
1. 接收、传入并处理来自客户端的连接;
2. 提供反向代理及过滤功能;
3. nginx任何能完成的其它任务;
1. 检查缓存存储中的缓存对象;
2. 使用缓存元数据建立内存数据库;
cache manager进程的主要任务:
1. 缓存的失效及过期检验;
在nginx内部,进程间的通信是通过模块的pipeline或chain实现的;换句话说,每一个功能或操作都由一个模块来实现。例如,压缩、通过FastCGI或uwsgi协议与upstream服务器通信,以及与memcached建立会话等。
上边介绍了这么多关于nginx的知识,不知你是否了解了nginx。下面我们就一块来安装LNMP吧。
yum grouplist #查看安装的组,假如你没有安装"Development Tools"和 "Server Platform Development",请执行下面的命令 yum -y groupinstall "Development Tools" "Server Platform Development" #安装开发工具和服务器端开发平台 yum -y --nogpgcheck localinstall *rpm #安装本地当前目录下所有的rpm包 yum -y pcre-devel bzip2-devel libcurl-devel libxml2-devel openssl-devel #确保以配置好yum源,然后安装所依赖的各软件包,否则后边编译安装时会报错 yum -y groupinstall "Compatibility libraries" #这个是兼容库,兼容一些老版本的库,如果需要可以安装,不需要可不安装,这里没有安装该兼容库
准备工作已经完毕,现在开始编译安装我们的各个软件。
groupadd -r nginx #创建nginx系统组 useradd -r -g nginx nginx #添加用户nginx,实现以nginx用户身份运行nginx服务进程 tar xf nginx-1.4.1.tar.gz #解压该文件 cd nginx-1.4.1 ./configure \ #在相应目录下执行该命令,其中\表示续行符 --prefix=/usr \ #指定安装文件目录,安装完毕后会在此目录下生成一个html目录 --sbin-path=/usr/sbin/nginx \ #nginx的可执行程序路径 --conf-path=/etc/nginx/nginx.conf \ #指定配置文件所在路径 --error-log-path=/var/log/nginx/error.log \ #错误日志所在路径 --http-log-path=/var/log/nginx/access.log \ #访问日志所在路径 --pid-path=/var/run/nginx/nginx.pid \ #pid文件所在路径 --lock-path=/var/lock/nginx.lock \ #锁文件所在路径 --user=nginx \ #指定运行nginx服务的用户,知道为何创建nginx用户了吧 --group=nginx \ #指定运行nginx服务的组 --with-http_ssl_module \ #启用ssl模块 --with-http_flv_module \ #启用flv模块 --with-http_stub_status_module \ #启用stub状态模块 --with-http_gzip_static_module \ #启用gzip静态模块 --http-client-body-temp-path=/var/tmp/nginx/client/ \ #指定客户端报文主体缓存的临时文件目录 --http-proxy-temp-path=/var/tmp/nginx/proxy/ \ #指定代理临时文件路径 --http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ \ #指定fastcgi临时文件路径 --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi \ #指定uwsgi临时文件路径 --http-scgi-temp-path=/var/tmp/nginx/scgi \ #指定scgi临时文件路径 --with-pcre \ #启用pcre --with-file-aio #启用文件aio功能 如果想了解更多选项的意义,可在nginx-1.4.1目录下,执行./configure --help命令查看。这里不再过多的介绍。 make && make install 安装完毕后,为我们的nginx提供SysV风格的服务脚本: vim /etc/init.d/nginx #编辑该文件 #!/bin/sh #这里是/bin/sh,不是/bin/bash,千万不要写错了 # # nginx - this script starts and stops the nginx daemon # # chkconfig: - 85 15 # description: Nginx is an HTTP(S) server, HTTP(S) reverse \ # proxy and IMAP/POP3 proxy server # processname: nginx # config: /etc/nginx/nginx.conf #nginx配置文件 # config: /etc/sysconfig/nginx #服务脚本的配置文件 # pidfile: /var/run/nginx.pid # Source function library. . /etc/rc.d/init.d/functions #读取系统自带的函数 # Source networking configuration. . /etc/sysconfig/network #读取网络配置 # Check that networking is up. [ "$NETWORKING" = "no" ] && exit 0 #判断时候启用网络功能,如果没有返回0 nginx="/usr/sbin/nginx" prog=$(basename $nginx) NGINX_CONF_FILE="/etc/nginx/nginx.conf" [ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx #如果存在服务脚本的配置文件,则读取该文件 lockfile=/var/lock/subsys/nginx #设定锁文件 make_dirs() { #定义函数,创建相关目录 # make required directories user=`nginx -V 2>&1 | grep "configure arguments:" | sed 's/[^*]*--user=\([^ ]*\).*/\1/g' -` options=`$nginx -V 2>&1 | grep 'configure arguments:'` for opt in $options; do if [ `echo $opt | grep '.*-temp-path'` ]; then value=`echo $opt | cut -d "=" -f 2` if [ ! -d "$value" ]; then # echo "creating" $value mkdir -p $value && chown -R $user $value fi fi done } start() { [ -x $nginx ] || exit 5 [ -f $NGINX_CONF_FILE ] || exit 6 make_dirs echo -n $"Starting $prog: " daemon $nginx -c $NGINX_CONF_FILE retval=$? echo [ $retval -eq 0 ] && touch $lockfile return $retval } stop() { echo -n $"Stopping $prog: " killproc $prog -QUIT retval=$? echo [ $retval -eq 0 ] && rm -f $lockfile return $retval } restart() { configtest || return $? stop sleep 1 start } reload() { configtest || return $? echo -n $"Reloading $prog: " killproc $nginx -HUP RETVAL=$? echo } force_reload() { restart } configtest() { $nginx -t -c $NGINX_CONF_FILE } rh_status() { status $prog } rh_status_q() { rh_status >/dev/null 2>&1 } case "$1" in start) rh_status_q && exit 0 $1 ;; stop) rh_status_q || exit 0 $1 ;; restart|configtest) $1 ;; reload) rh_status_q || exit 7 $1 ;; force-reload) force_reload ;; status) rh_status ;; condrestart|try-restart) rh_status_q || exit 0 ;; *) echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}" exit 2 esac 保存退出。 chmod +x /etc/init.d/nginx #为该脚本赋予执行权限 chkconfig --add nginx #将nginx添加至服务列表 chkconfig nginx on #让nginx开机自启动 service nginx start #启动nginx服务,进行测试
在物理机上测试一下吧。
出现此问题,是因为你本地的80端口已经被占用了,这时候,你可使用netstat -tnlp命令查看下,本地是否已经启用了80端口,一般来说都是本地自动启动了httpd服务,导致80端口被占用造成的错误。因为httpd和nginx使用的是同一个端口80。查看及解决办法如下图所示:
/etc/nginx/nginx.conf文件部分信息 worker_processes 1; #工作进程个数,默认为1,可自行修改,但要看你服务器的性能如何 #error_log logs/error.log; #error_log logs/error.log notice; #定义错误日志,我们在编译安装是已指定过,因此,这里默认是注释掉的 #error_log logs/error.log info; #pid logs/nginx.pid; #pid文件,编译安装时,已指定过,这里默认为注释掉了 events { worker_connections 1024; #事件驱动模型中,工作进程单个最大连接数,系统最大连接总数为worker_processes*worker_connections } http { #http服务段 include mime.types; #支持mime类型,已支持非文本格式 default_type application/octet-stream; #log_format main '$remote_addr - $remote_user [$time_local] "$request" ' # '$status $body_bytes_sent "$http_referer" ' # '"$http_user_agent" "$http_x_forwarded_for"'; #access_log logs/access.log main; sendfile on; #keepalive_timeout 0; keepalive_timeout 65; #持续连接超时时长 #gzip on; server { #服务段设置 listen 80; #监听端口 server_name localhost; #服务名 #charset koi8-r; #access_log logs/host.access.log main; location / { #相当于httpd服务配置文件的段 root html; #相当于httpd服务配置文件的DocumentRoot配置段,用来定义web文档所在目录,是相对路径,相对于/usr/html而言 index index.html index.htm; #定义web文档类型 } #error_page 404 /404.html; #定义错误页面,默认没有启用,也没有此页面 # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; #定义错误代码界面 location = /50x.html { #如果匹配到该界面,显示该界面信息,该文件内容见下图 root html; } # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # #location ~ \.php$ { #php段,默认是注释掉的,待会我们安装完php后就需要启用该段 # root html; # fastcgi_pass 127.0.0.1:9000; #监听的地址及端口号 # fastcgi_index index.php; #指定类型为php # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; # include fastcgi_params; #其他相关配置在该文件中设定 #} } # another virtual host using mix of IP-, name-, and port-based configuration # #server { #虚拟主机配置,可使用基于虚拟主机访问,这里我们不使用基于虚拟主机访问,仅使用基于IP的访问,默认是注释掉的,假如你想使用基于虚拟主机的访问,可启用此段 # listen 8000; # listen somename:8080; # server_name somename alias another.alias; # location / { # root html; # index index.html index.htm; # } #} # HTTPS server # #server { #基于https的服务,默认为注释掉的,待会使用CA时就需要启用该段了 # listen 443; #监听的端口 # server_name localhost; # ssl on; #是否启用ssl认证 # ssl_certificate cert.pem; #ssl认证的证书所在文件 # ssl_certificate_key cert.key; #ssl认证的密钥文件 # ssl_session_timeout 5m; #ssl会话超时时长 # ssl_protocols SSLv2 SSLv3 TLSv1; #ssl支持的协议 # ssl_ciphers HIGH:!aNULL:!MD5; #ssl认证使用的加密算法 # ssl_prefer_server_ciphers on; #启动服务器ssl认证 # location / { # root html; # index index.html index.htm; # } #} }
location段各字符含义备注:
location uri {};
对当前路径及子路径下的所有对象都生效
location = uri {};
精确匹配指定的路径,不包括子路径,因此,只对当前资源生效;
location ~ uri {};
location ~* uri {};
模式匹配uri,此处的uri可使用正则表达式,与~的区别是:~区分字符大小写,~*不区分字符大小写;
location ^~ uri {};
不使用正则表达式;
优先级由高到低:= > ^~ > ~*|~ > 空(当省略=|~|~*|^~时即为空)
cd /etc/nginx/ #进入该目录 cp nginx.conf nginx.conf.bak #先做个备份,到时候修改完了还可以恢复过来 vim nginx.conf #编辑该文件 location / { #修改该段 root /web/html; #修改默认设置,然后指定web文档根目录 index index.html index.htm; } mkdir /web/html #创建该目录,作为我们的根目录 vim /web/html/index.html #编辑该文件,添加如下信息http://lq2419.blog.51cto.com/
下图是显示效果:
到此,nginx已经介绍完毕。等安装完毕所有的软件再来介绍其他功能。
在前面的博客中,我已经介绍过如何安装mysql了,这里本不想在重复介绍如何编译安装mysql了,但由于安装环境不同,加上一些人呢懒得去打开另一个网页,这里就在啰嗦一遍,重新介绍下如何编译安装mysql,同时,将自己在创建逻辑卷及安装过程中遇到的问题及解决办法一并分享一下。假如你在创建逻辑卷时没有遇到什么问题,就当我在说废话,下面两个问题可以忽略。
zerombr yes
clearpart --all
part /boot --fstype=ext4 --size=200
part pv.008 --size=61440
volgroup vg0 --pesize=8192 pv.008logvol / --fstype=ext4 --name=root --vgname=vg0 --size=20480logvol swap --name=swap --vgname=vg0 --size=2048logvol /usr --fstype=ext4 --name=usr --vgname=vg0 --size=10240logvol /var --fstype=ext4 --name=var --vgname=vg0 --size=20480
废话不多说,继续我们上边的安装吧。
pvcreate /dev/sdb2 #创建物理卷 vgcreate myvg /dev/sdb2 #创建卷组,卷组名为myvg lvcreate -n mydata -L 10G myvg #在卷组上创建逻辑卷,大小为10G,卷标为mydata lvs #查看创建的逻辑卷信息 mke2fs -j /dev/myvg/mydata #格式化该逻辑卷 mkdir /mydata #创建该目录,用于挂载我们的逻辑卷 vim /etc/fstab #编辑该文件,添加如下该行信息,将我们的创建的逻辑卷挂载至/mydata目录下 /dev/myvg/mydata /mydata ext3 defaults 0 0 mount -a #挂载所有磁盘分区 然后创建mysql用户mysql组。 groupadd -r mysql #创建mysql组 useradd -r -g mysql mysql #创建mysql系统用户 mkdir /mydata/data #创建该目录,用于存放我们mysql 的数据文件 chown -R mysql.mysql /mydata/data #修改该文件及子文件为mysql属主属组,方便mysql写入数据 tar xf mysql-5.6.10-linux-glibc2.5-i686.tar.gz -C /usr/local/ #解压该文件到指定目录,确保当前处于mysql压缩文件所在目录 ln -sv mysql-5.6.10-linux-glibc2.5-i686 mysql #创建mysql-5.6.10-linux-glibc2.5-i686到mysql的链接 cd /usr/local/mysql #进入该目录 scripts/mysql_install_db --user=mysql --datadir=/mydata/data #--user指定我们的mysql服务器创建的文件及目录以哪个用户运行,--datadir指定我们的数据文件所在目录,这里mysql不需要执行./configure命令 完成后在当前目录下会生成一个my.cnf的文件,这就是我们的配置文件,直接编辑。 vim my.cnf datadir = /mydata/data #修改我们的数据文件存放位置 socket = /tmp/mysql.sock #添加套接字文件所在路径 innodb_file_per_table=ON #启用每表一个表空间 保存退出。同样,为我们的mysql服务提供服务脚本。这里我们使用系统自带的,我们不需修改即可使用。 cp support-files/mysql.server /etc/rc.d/init.d/mysqld #将该目录下的脚本拷贝到指定目录下,并重命名 vim /etc/profile.d/mysql #编辑该文件,添加环境变量 export PATH=$PATH:/usr/local/mysql/bin #添加环境变量,让系统直接使用mysql的命令 同样,将该服务脚本添加到服务列表。 chkconfig --add mysql #添加该服务脚本至服务列表 chkconfig mysql on #设置开机启动,默认级别为2345 service mysql start #开启mysql服务 netstat -tunlp #查看我们的mysql服务端口是否已开启,默认mysql监听在3306端口 现在为我们的mysql创建帮助手册,并添加其开发组件至系统。 在我们的mysql目录下,有个man目录,其下就是mysql的帮助手册了。 vim /etc/man.config #编辑该文件,添加如下一行信息 MANPATH /usr/local/mysql/man ln -sv /usr/local/mysql/include /usr/include/mysql #创建符号链接,输出mysql的头文件至系统头文件路径 echo "/usr/local/mysql/lib" > /etc/ld.so.conf.d/mysql.conf #添加该行信息,输出mysql的库文件给系统库查找路径 ldconfig #让系统重新载入系统库 进入mysql测试下。 mysql -uroot -p #通过以root身份进入mysql,下图为测试效果
到此,mysql安装完毕。
tar xf php-5.4.13.tar.bz2 cd php-5.4.13 ./configure \ --prefix=/usr/local/php \ #安装文件所在目录 --with-mysql=/usr/local/mysql \ #mysql文件所在目录 --with-openssl \ #启用openssl认证功能 --enable-fpm \ #支持fpm --enable-sockets \ --enable-sysvshm \ --with-mysqli=/usr/local/mysql/bin/mysql_config \ --enable-mbstring \ --with-freetype-dir \ --with-jpeg-dir \ --with-png-dir \ --with-zlib-dir \ --with-libxml-dir=/usr \ --enable-xml \ --with-mhash \ #启用mhash扩展 --with-mcrypt \ #启用mcrypt扩展 --with-config-file-path=/etc \ --with-config-file-scan-dir=/etc/php.d \ --with-bz2 --with-curl make && make install 完成后为php提供配置文件。 cp php.ini-production /etc/php.ini 为php-fpm提供Sysv init脚本,并将其添加至服务列表: cp sapi/fpm/init.d.php-fpm /etc/rc.d/init.d/php-fpm chmod +x /etc/rc.d/init.d/php-fpm chkconfig --add php-fpm chkconfig php-fpm on 为php-fpm提供配置文件: cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf 编辑php-fpm的配置文件,修改如下内容: vim /usr/local/php/etc/php-fpm.conf pm.max_children = 50 pm.start_servers = 5 pm.min_spare_servers = 2 pm.max_spare_servers = 8 pid = /usr/local/php/var/run/php-fpm.pid 配置完成后,启动php-fpm服务。 service php-fpm start ps aux | grep php-fpm #查看该进程,显示如下 root 4132 0.0 1.1 104036 2984 ? Ss May18 0:03 php-fpm: master process (/usr/local/php/etc/php-fpm.conf) nobody 4133 0.0 1.9 104564 4916 ? S May18 0:00 php-fpm: pool www nobody 4134 0.0 2.1 104564 5260 ? S May18 0:00 php-fpm: pool www nobody 4135 0.0 1.9 104564 4948 ? S May18 0:00 php-fpm: pool www nobody 4136 0.0 1.9 104564 4960 ? S May18 0:00 php-fpm: pool www nobody 4137 0.0 1.9 104564 4948 ? S May18 0:00 php-fpm: pool www php安装完毕。现在去修改nginx配置文件,整合nginx和php。 vim /etc/nginx/nginx.conf #编辑该文件,启用如下选项,上边已经介绍个各选项含义,这里直接修改 location ~ \.php$ { root /web/html; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; include fastcgi_params; } location / { root /web/html; index index.php index.html index.htm; #添加index.php } vim /etc/nginx/fastcgi_params #编辑该文件,删除里边所有信息,添加如下信息 fastcgi_param GATEWAY_INTERFACE CGI/1.1; fastcgi_param SERVER_SOFTWARE nginx; 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 REQUEST_URI $request_uri; fastcgi_param DOCUMENT_URI $document_uri; fastcgi_param DOCUMENT_ROOT $document_root; fastcgi_param SERVER_PROTOCOL $server_protocol; 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; 修改完毕后,保存退出。重新装载nginx服务。 service nginx reload 修改我们刚才建的主界面,添加几行信息: vim /web/html/index.htmlhttp://lq2419.blog.51cto.com/
mv /web/html/index.html /web/html/index.php
现在我们去安装xcache加速。
tar xf xcache-3.0.1.tar.bz2 cd xcache-3.0.1 /usr/local/php/bin/phpize ./configure --enable-xcache --with-php-config=/usr/local/php/bin/php-config make && make install 现在去整合php和xcache。 mkdir /etc/php.d cp xcache.ini /etc/php.d vim /etc/php.d/xcache.ini #编辑该文件,添加如下一行信息,如果php.ini文件中有多条zend_extension指令行,要确保此新增的行排在第一位 extension = /usr/local/php/lib/php/extensions/no-debug-zts-20100525/xcache.so 启用php-fpm服务: service php-fpm restart
xcache添加完毕。到此,LNMP制作完毕,就是那么简单。你成功了么?
vim /etc/pki/tls/openssl.conf #编辑该文件,修改如下内容 [ req_distinguished_name ] countryName_default = CN stateOrProvinceName_default = Henan localityName_default = Zhengzhou 0.organizationName_default = MageEdu organizationalUnitName_default = Tech cd /etc/pki/CA (umask 077;openssl genrsa -out private/cakey.pem 2048) openssl req -new -x509 -key private/cakey.pem -out cacert.pem #有x509表示生成自签证书 Country Name (2 letter code) [CN]: State or Province Name (full name) [Henan]: Locality Name (eg, city) [Zhengzhou]: Organization Name (eg, company) [MageEdu]: Organizational Unit Name (eg, section) [Tech]: Common Name (eg, your name or your server's hostname) []:lq2419.langdu.com Email Address []:[email protected] touch index.txt serial echo 01 > serial mkdir /etc/nginx/ssl cd /etc/nginx/ssl (umask 077;openssl genrsa -out nginx.key 1024) openssl req -new -key nginx.key -out nginx.csr #没有x509表示生成证书请求 Country Name (2 letter code) [CN]: State or Province Name (full name) [Henan]: Locality Name (eg, city) [Zhengzhou]: Organization Name (eg, company) [MageEdu]: Organizational Unit Name (eg, section) [Tech]: Common Name (eg, your name or your server's hostname) []:www.langdu.com Email Address []:[email protected] Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []: openssl ca -in nginx.csr -out nginx.crt -days 3650 #生成证书 证书生成完成后,编辑我们的nginx配置文件,启用ssl认证功能。 vim /etc/nginx/nginx.conf #编辑该文件,启用如下选项,并添加部分内容 server { listen 443; server_name localhost; ssl on; ssl_certificate /etc/nginx/ssl/nginx.crt; #证书所在路径 ssl_certificate_key /etc/nginx/ssl/nginx.key; #密钥所在路径 ssl_session_timeout 5m; ssl_protocols SSLv2 SSLv3 TLSv1; ssl_ciphers HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on; location / { root /web/html; #修改根所在路径 index index.php index.html index.htm; } location ~ \.php$ { #添加此段,已支持php root /web/html; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; include fastcgi_params; } } 保存退出。重新载入nginx服务。 service nginx reload