lnmp架构(linux nginx mysql php)搭建

来源:互联网 发布:郑州软件开发工资 编辑:程序博客网 时间:2024/06/05 07:48
lamp->lnmpnginxsurvey.netcraft.net查看各大网站使用的web服务器,使用下面的命令# curl -I www.sina.com    结论:现在大型网站几乎统一都使用nginx或nginx做二次开发的版本(如tengine,OpenResty等)nginx相对于apache的优势?资源占用少支持大并发================================================================================================centos7.3平台下rpm版单机lnmp的搭建第一步:准备1,主机名2,关闭firewalld,selinux3,关闭NetworkManager,并配置静态ip4,配置本地yum,epel源,163源5,时间同步第二步:安装lnmp相关的rpm包# yum install mariadb mariadb-server php php-mysql php-gd libjpeg* php-ldap php-odbc php-pear php-xml php-xmlrpc php-mbstring php-bcmath php-mhash nginx php-fpm php-pecl-zendopcache  此处安装的软件其实就是mysql(mariadb)和nginx和php的一些模块。安装php也可以直接yum install php* 将所有的模块安装第三步:启动mariadb,并登录验证# systemctl start mariadb.service# systemctl status mariadb.service# systemctl enable mariadb.service# mysql--登录确认能使用第四步:确认php安装模块(modules),并按需求进行模块的增加或删除,对php配置文件进行优化(可选)# php -m--查看已经安装的php模块,如果还有需要的模块没有安装,则使用yum install php-xxx去安装相应的模块[PHP Modules]bcmathbz2calendarCorectypecurldatedomeregexiffileinfofilterftpgdgettextgmphashiconvjsonldaplibxmlmbstringmhashmysqlmysqliodbcopensslpcntlpcrePDOpdo_mysqlPDO_ODBCpdo_sqlitePharposixreadlineReflectionsessionshmopSimpleXMLsocketsSPLsqlite3standardsysvmsgsysvsemsysvshmtokenizerwddxxmlxmlreaderxmlrpcxmlwriterxslZend OPcachezipzlib[Zend Modules]Zend OPcache# ls /usr/lib64/php/modules/--所有安装的模块路么都在此目录下bcmath.so    json.so      odbc.so       pdo_sqlite.so  sysvsem.so    xmlwriter.socurl.so      ldap.so      opcache.so    phar.so        sysvshm.so    xsl.sodom.so       mbstring.so  pdo_mysql.so  posix.so       wddx.so       zip.sofileinfo.so  mysqli.so    pdo_odbc.so   sqlite3.so     xmlreader.sogd.so        mysql.so     pdo.so        sysvmsg.so     xmlrpc.so/etc/php.ini--php主配置文件,如果要进行相应的优化修改或者是以源码编译的方式编出的模块需要加到php里的都需要修改此配置文件第五步:优化php-fpm,并启动(php-fpm为php的fastcgi模式,简单来说就是php的服务模式)# vim /etc/php-fpm.d/www.conf --打开php-fpm主配置文件并进行优化(以下优化在生产环境视具体情况而定)12  listen = /var/run/fastcgi/fastcgi.socket--原来是监听127.0.0.1:9000也是可以的,我这里换成socket来做(本机连接可以使用socket或tcp/ip协议方式,远程连接只能使用tcp/ip协议方式)218 php_flag[display_errors] = on--打开php错误显示功能39 user = nginx--用户与组和跑nginx服务的用户一致,避免权限问题41 group = nginx31 listen.owner = nginx32 listen.group = nginx--socket文件的权限设置。用户与组和跑nginx服务的用户一致,避免权限问题(如果前面使用的是tcp/ip的方式,这里就注释就好)33 listen.mode = 066660 pm = dynamic         --对于专用服务器,pm可以设置为static。如果选择static,则由pm.max_children指定固定的子进程数。如果选择dynamic,则可以动态调整下面几个参数70 pm.max_children = 64 --子进程最大数,我这里只是参考值(看系统资源决定,视实际环境测试后调整,下几个参数也一样)75 pm.start_servers = 20 --启动时默认启动的进程数80 pm.min_spare_servers = 5--保证空闲进程数最小值,如果空闲进程小于此值,则创建新的子进程85 pm.max_spare_servers = 35    --保证空闲进程数最大值,如果空闲进程大于此值,此进行清理160 rlimit_files = 65535     --打开的文件描述符数量,不能大于系统的限制(系统可以使用ulimit命令查看和设置)(注意:前面的数字是行号,不是说需要在配置文件里面写入)建立fastcgi模式的socket产生的目录,与上面的配置对应# mkdir /var/run/fastcgi# chown nginx.nginx /var/run/fastcgi/设置系统打开的文件描述符数量,与上面的配置对应# ulimit -n1024# ulimit -SHn 65535# echo "ulimit -SHn 65535" >> /etc/rc.local启动php-fpm服务# systemctl start php-fpm.service# systemctl status php-fpm.service # systemctl enable php-fpm.service第六步:--nginx的配置文件的一个基本结构如下:常见基本配置(如跑服务进程的用户,启动进程数,log,pid等)events {  事件(优化并发数,网络IO模型选择)}http  {       针对所有server的全局配置      server {虚拟主机一      }      server {虚拟主机二      }}配置nginx(nginx参数实在太多,这里先简要配置)我这里的配置结果如下# cat /etc/nginx/nginx.conf |grep -v '#'user nginx;worker_processes auto;error_log /var/log/nginx/error.log;pid /run/nginx.pid;include /usr/share/nginx/modules/*.conf;events {    worker_connections 1024;}http {    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  /var/log/nginx/access.log  main;    sendfile            on;    tcp_nopush          on;    tcp_nodelay         on;    keepalive_timeout   65;    types_hash_max_size 2048;    include             /etc/nginx/mime.types;    default_type        application/octet-stream;    include /etc/nginx/conf.d/*.conf;    server {        listen       80 default_server;        listen       [::]:80 default_server;        server_name  172.16.25.2;        root         /usr/share/nginx/html;index      index.php index.html;        include /etc/nginx/default.d/*.conf;        error_page 404 /404.html;            location = /40x.html {        }        error_page 500 502 503 504 /50x.html;            location = /50x.html {        }        location ~ \.php$ {            fastcgi_pass    unix:/var/run/fastcgi/fastcgi.socket;            fastcgi_index  index.php;            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;            include        fastcgi_params;        }    }}启动nginx服务# systemctl start nginx.service# systemctl status nginx.service# systemctl enable nginx.service第七步:测试nginx是否工作正常,是否能支持php在nginx家目录里加上php测试页# vim /usr/share/nginx/html/test.php<?php        phpinfo();?>找一个有firefox的客户端分别访问下面页面进行测试http://172.16.25.2/http://172.16.25.2/test.php 第八步:安装discuz论坛并测试    1,解压discuz到nginx家目录# mkdir /usr/share/nginx/html/discuz/# unzip Discuz_X3.3_SC_UTF8.zip -d /usr/share/nginx/html/discuz/# cd /usr/share/nginx/html/discuz/# mv upload/*  .# rm upload/ -rf2,然后使用firefox用下面的路径来安装http://172.16.25.2/discuz3,环境检查这一步,有些目录和文件权限需要修改(下面直接使用简单方式全改成nginx的owner和group)# chown nginx.nginx /usr/share/nginx/html/discuz -R4,mariadb数据库授权# mysqlMariaDB [(none)]> create database lnmp_discuz;--创建一个库,用于存放将要安装的discuz论坛的表MariaDB [(none)]> grant all on lnmp_discuz.* to 'lnmpdiscuz'@'localhost' identified by '123';--授权一个用户,用于discuz论坛程序连接mysqlMariaDB [(none)]> flush privileges;5,http://172.16.25.2/discuz/路径填上对应的数据库地址,库,用户,密码。开始安装6,访问http://172.16.25.2/discuz/测试论坛==================================================================================补充一:memcache介绍与安装memcache是一个开源分布式的内存对象缓存系统(redis与其类似).一般放在web程序与数据库,帮助缓存程序取数据库的数据。client|    正向代理(静态)|      因特网|   squid或varnish(静态)|nginx|php-factcgi(opcache做php代码缓存)|memcache或redis|mysql(query_cache)# yum install memcached php-pecl-memcache  --前面是memcached主程序包,后面是php支持memcache的模块包# systemctl start memcached.service # systemctl status memcached.service # systemctl enable memcached.service# systemctl restart php-fpm.service --重启php-fpm,让php支持memcache模块生效# lsof -i:11211上面是安装完memcached后,可以让开发人员使用。如果是像discuz这种开源论坛安装完后,我没有开发能力,如何让discuz使用memcache?使用安装时的admin用户和密码登陆后台http://172.16.25.2/discuz/admin.php点全局--》性能优化--》内存优化可以看到memcache是支持,但是关闭的把关闭状态改成打开的方法为:# vim /usr/share/nginx/html/discuz/config/config_global.php   25 $_config['memory']['memcache']['server'] = '127.0.0.1';--把这个IP127.0.0.1配上(如果memcache在另一台机器上,就写它的IP)保存后,再刷新后台的内存优化界面状态就变为打开了==========================================================================# yum install redis php-pecl-redis# systemctl restart php-fpm.service # vim /etc/redis.confdaemonize yes--改为yes,表示运行成daemon模式# systemctl start redis.service # systemctl status redis.service # systemctl enable redis.service # systemctl restart php-fpm.service --重启php-fpm,让php支持redis模块生效# lsof -i:6379使用安装时的admin用户和密码登陆后台http://172.16.25.2/discuz/admin.php点全局--》性能优化--》内存优化可以看到redis是支持,但是关闭的把关闭状态改成打开的方法为:# vim /usr/share/nginx/html/discuz/config/config_global.php   19 $_config['memory']['redis']['server'] = '127.0.0.1';再回到web去刷新,就可以看到redis是支持并且打开状态了=====================================================================把单机lnmp分离成多机clientnginxphp(fastcgi)   opcachememcache或redismysql               client CDNsquid或varnishsquid或varnishnginx_webnginx_webphp(fastcgi)php(fastcgi)memcache或redismemcache或redismysql主mysql从1mysql从2写读读==============================================================================
原创粉丝点击