配置一个nginx+php-fpm的web服务器

文章目录

[隐藏]

  • 一、基本信息
  • 二、软件安装配置
    • 1、NGINX+OPENSSL安装
    • 2、PHP-FPM安装
  • 三、基于以上配置PHP网站
  • 四、启动服务
一、基本信息
  • 系统(L):CentOS 6.9 #下载地址:http://mirrors.sohu.com
  • Web服务器(N):NGINX 1.14.0 #下载地址:http://nginx.org/en/download.html
  • 数据库服务器(M):MySQL 5.6.40 #下载地址:https://dev.mysql.com/downloads/mysql
  • PHP-FPM服务器(P):php-5.6.8.tar.gz #下载地址:http://mirrors.sohu.com/php/
  • OPENSSL:openssl-1.0.2o.tar.gz #下载地址:https://www.openssl.org/source/

指定服务安装的通用位置

mkdir /usr/local/services  SERVICE_PATH=/usr/local/services  

创建服务运行的账户

useradd -r -M -s /sbin/nologin www  

安装所需依赖包

yum -y install pcre pcre-devel   gperftools gcc zlib-devel   libxml2 libxml2-devel   bzip2 bzip2-devel   curl curl-devel   libjpeg-devel libjpeg   libpng-devel libpng   freetype freetype-devel   libmcrypt libmcrypt-devel   openssl-devel  
二、软件安装配置

1、NGINX+OPENSSL安装

下载解压NGINX+OPENSSL

NGINX_URL="http://nginx.org/download/nginx-1.14.0.tar.gz"  OPENSSL_URL="https://www.openssl.org/source/openssl-1.1.0h.tar.gz"    wget -P ${SERVICE_PATH} ${NGINX_URL} && tar -zxvf ${SERVICE_PATH}/nginx*.tar.gz -C ${SERVICE_PATH}  wget -P ${SERVICE_PATH} ${OPENSSL_URL} && tar -zxvf ${SERVICE_PATH}/openssl*.gz -C ${SERVICE_PATH}  

编译安装NGINX

cd ${SERVICE_PATH}/nginx-*;./configure   --prefix=${SERVICE_PATH}/nginx   --user=www --group=www   --with-http_stub_status_module   --with-http_ssl_module   --with-http_flv_module   --with-pcre   --with-http_gzip_static_module   --with-openssl=${SERVICE_PATH}/openssl*   --with-http_realip_module   --with-google_perftools_module   --without-select_module   --without-mail_pop3_module   --without-mail_imap_module   --without-mail_smtp_module   --without-poll_module   --without-http_autoindex_module   --without-http_geo_module   --without-http_uwsgi_module   --without-http_scgi_module   --without-http_memcached_module   --with-cc-opt='-O2' && cd ${SERVICE_PATH}/nginx-*;make && make install  

NGINX+OPENSSL安装完成后的清理与其他配置

ln -sv ${SERVICE_PATH}/nginx /usr/local/  rm -rf ${SERVICE_PATH}/nginx/conf/*.default  cd ${SERVICE_PATH} ; rm -rf nginx*.tar.gz openssl*.tar.gz  

写入主配置文件nginx.conf(配置已优化)

cat << EOF >/usr/local/nginx/conf/nginx.conf  user www;  worker_processes WORKERNUMBER;  worker_cpu_affinity auto;  worker_rlimit_nofile 655350;    error_log /var/log/nginx_error.log;  pid /tmp/nginx.pid;    google_perftools_profiles /tmp/tcmalloc;    events {  use epoll;  worker_connections 655350;  multi_accept on;  }    http {  charset utf-8;  include mime.types;  default_type text/html;    log_format main '"$remote_addr" - [$time_local] "$request" '  '$status $body_bytes_sent "$http_referer" '  '"$http_user_agent" '  '"$sent_http_server_name $upstream_response_time" '  '$request_time '  '$args';      sendfile on;  tcp_nopush on;  tcp_nodelay on;  keepalive_timeout 120;  client_body_buffer_size 512k;  client_header_buffer_size 64k;  large_client_header_buffers 4 32k;  client_max_body_size 300M;  client_header_timeout 15s;  client_body_timeout 50s;  open_file_cache max=102400 inactive=20s;  open_file_cache_valid 30s;  open_file_cache_min_uses 1;  server_names_hash_max_size 2048;  server_names_hash_bucket_size 256;  server_tokens off;  gzip on;  gzip_proxied any;  gzip_min_length 1024;  gzip_buffers 4 8k;  gzip_comp_level 9;  gzip_disable "MSIE [1-6].";  gzip_types application/json test/html text/plain text/css application/font-woff application/pdf application/octet-stream application/x-javascript application/javascript application/xml text/javascript;  fastcgi_cache_path /dev/shm/ levels=1:2 keys_zone=fastcgicache:512m inactive=10m max_size=3g;  fastcgi_cache_lock on;  fastcgi_ignore_headers Cache-Control Expires Set-Cookie;  fastcgi_send_timeout 300;  fastcgi_connect_timeout 300;  fastcgi_read_timeout 300;  fastcgi_buffer_size 256k;  fastcgi_buffers 4 128k;  fastcgi_busy_buffers_size 256k;  fastcgi_temp_file_write_size 256k;      include vhost/*.conf;  }  EOF  

NGINX worker进程数配置,指定为逻辑CPU数量的2倍

THREAD=`expr $(grep process /proc/cpuinfo |wc -l) * 2`  sed -i s"/WORKERNUMBER/$THREAD/" ${SERVICE_PATH}/nginx/conf/nginx.conf  

2、PHP-FPM安装

下载并解压PHP-FPM软件

FPM_URL="http://mirrors.sohu.com/php/php-5.6.8.tar.gz"  wget -P ${SERVICE_PATH} ${FPM_URL} && tar -zxvf ${SERVICE_PATH}/php*.tar.gz -C ${SERVICE_PATH}  

编译安装PHP-FPM

cd ${SERVICE_PATH}/php-*;./configure   --prefix=${SERVICE_PATH}/php   --with-gd   --with-mcrypt   --with-mysql=mysqlnd   --with-mysqli=mysqlnd   --with-pdo-mysql=mysqlnd   --enable-maintainer-zts   --enable-ftp   --enable-zip   --with-bz2   -with-iconv-dir   --with-freetype-dir   --with-jpeg-dir   --with-png-dir   --with-config-file-path=${SERVICE_PATH}/php   --enable-mbstring   --enable-fpm   --with-fpm-user=www   --with-fpm-group=www   --disable-debug   --enable-opcache   --enable-soap   --with-zlib   --with-libxml-dir=/usr   --enable-xml   --disable-rpath   --enable-bcmath   --enable-shmop   --enable-sysvsem   --enable-inline-optimization   --with-curl   --enable-mbregex   --enable-gd-native-ttf   --with-openssl   --with-mhash   --enable-pcntl   --enable-sockets   --with-xmlrpc   --with-pear   --with-gettext   --disable-fileinfo && cd ${SERVICE_PATH}/php-*;make && make install  

若FPM程序有插件需求,如mongo或redis连接插件,则可通过pecl安装php相关插件

${SERVICE_PATH}/php/bin/pecl install mongo || exit    ${SERVICE_PATH}/php/bin/pecl install redis || exit  

安装完成后的配置清理

ln -sv ${SERVICE_PATH}/php /usr/local/  

php.ini配置文件写入(配置已优化)

cat << EOF >${SERVICE_PATH}/php/php.ini  [PHP]  engine = On  short_open_tag = Off  asp_tags = Off  precision = 14  output_buffering = 4096  zlib.output_compression = Off  implicit_flush = Off  unserialize_callback_func =  serialize_precision = 17  disable_functions = shell_exec,phpinfo,exec  disable_classes =  zend.enable_gc = On  expose_php = Off  max_execution_time = 60  max_input_time = 60  memory_limit = 128M  error_reporting = E_WARING & ERROR  display_errors = Off  display_startup_errors = Off  log_errors = On  log_errors_max_len = 2048  ignore_repeated_errors = Off  ignore_repeated_source = Off  report_memleaks = On  track_errors = Off  html_errors = Off  error_log = /var/log/php_errors.log  variables_order = "GPCS"  request_order = "GP"  register_argc_argv = Off  auto_globals_jit = On  post_max_size = 8M  auto_prepend_file =  auto_append_file =  default_mimetype = "text/html"  default_charset = "UTF-8"  doc_root =  user_dir =  enable_dl = Off  cgi.fix_pathinfo=0  file_uploads = On  upload_max_filesize = 2M  max_file_uploads = 20  allow_url_fopen = Off  allow_url_include = Off  default_socket_timeout = 60  [CLI Server]  cli_server.color = On  [Date]  [filter]  [iconv]  [intl]  [sqlite]  [sqlite3]  [Pcre]  [Pdo]  [Pdo_mysql]  pdo_mysql.cache_size = 2000  pdo_mysql.default_socket=  [Phar]  [mail function]  SMTP = localhost  smtp_port = 25  mail.add_x_header = On  [SQL]  sql.safe_mode = Off  [ODBC]  odbc.allow_persistent = On  odbc.check_persistent = On  odbc.max_persistent = -1  odbc.max_links = -1  odbc.defaultlrl = 4096  odbc.defaultbinmode = 1  [Interbase]  ibase.allow_persistent = 1  ibase.max_persistent = -1  ibase.max_links = -1  ibase.timestampformat = "%Y-%m-%d %H:%M:%S"  ibase.dateformat = "%Y-%m-%d"  ibase.timeformat = "%H:%M:%S"  [MySQL]  mysql.allow_local_infile = On  mysql.allow_persistent = On  mysql.cache_size = 2000  mysql.max_persistent = -1  mysql.max_links = -1  mysql.default_port =  mysql.default_socket =  mysql.default_host =  mysql.default_user =  mysql.default_password =  mysql.connect_timeout = 60  mysql.trace_mode = Off  [MySQLi]  mysqli.max_persistent = -1  mysqli.allow_persistent = On  mysqli.max_links = -1  mysqli.cache_size = 2000  mysqli.default_port = 3306  mysqli.default_socket =  mysqli.default_host =  mysqli.default_user =  mysqli.default_pw =  mysqli.reconnect = Off  [mysqlnd]  mysqlnd.collect_statistics = On  mysqlnd.collect_memory_statistics = Off  [OCI8]  [PostgreSQL]  pgsql.allow_persistent = On  pgsql.auto_reset_persistent = Off  pgsql.max_persistent = -1  pgsql.max_links = -1  pgsql.ignore_notice = 0  pgsql.log_notice = 0  [Sybase-CT]  sybct.allow_persistent = On  sybct.max_persistent = -1  sybct.max_links = -1  sybct.min_server_severity = 10  sybct.min_client_severity = 10  [bcmath]  bcmath.scale = 0  [browscap]  [Session]  session.save_handler = files  session.save_path = "/tmp"  session.use_strict_mode = 0  session.use_cookies = 1  session.use_only_cookies = 1  session.name = PHPSESSID  session.auto_start = 0  session.cookie_lifetime = 0  session.cookie_path = /  session.cookie_domain =  session.cookie_httponly =  session.serialize_handler = php  session.gc_probability = 1  session.gc_divisor = 1000  session.gc_maxlifetime = 1440  session.referer_check =  session.cache_limiter = nocache  session.cache_expire = 180  session.use_trans_sid = 0  session.hash_function = 0  session.hash_bits_per_character = 5  url_rewriter.tags = "a=href,area=href,frame=src,input=src,form=fakeentry"  [MSSQL]  mssql.allow_persistent = On  mssql.max_persistent = -1  mssql.max_links = -1  mssql.min_error_severity = 10  mssql.min_message_severity = 10  mssql.compatibility_mode = Off  mssql.secure_connection = Off  [Assertion]  [COM]  [mbstring]  [gd]  gd.jpeg_ignore_warning = 0  [exif]  [Tidy]  tidy.clean_output = Off  [soap]  soap.wsdl_cache_enabled=1  soap.wsdl_cache_dir="/tmp"  soap.wsdl_cache_ttl=86400  soap.wsdl_cache_limit = 5  [sysvshm]  [ldap]  ldap.max_links = -1  [mcrypt]  [dba]  [opcache]  opcache.enable=1  opcache.enable_cli=0  opcache.memory_consumption=128  opcache.interned_strings_buffer=8  opcache.max_accelerated_files=4000  opcache.validate_timestamps=1  opcache.revalidate_freq=30  opcache.fast_shutdown=1  opcache.enable_file_override=1  [curl]  [openssl]  extension_dir='${SERVICE_PATH}/php/lib/php/extensions/'  ;extension=mongo.so  ;extension=redis.so  EOF  

php-fpm.conf配置文件写入(配置已优化)

cat << EOF >${SERVICE_PATH}/php/etc/php-fpm.conf  [global]  error_log = /var/log/php-fpm-error.log  log_level = warning  process_control_timeout = 10  rlimit_files = 655350  events.mechanism = epoll  [www]  user = www  group = www  listen = /dev/shm/php-fpm.sock  listen.backlog = 2048  listen.owner = www  listen.group = www  listen.mode = 0660  pm = dynamic  pm.max_children = 200  pm.start_servers = 105  pm.min_spare_servers = 10  pm.max_spare_servers = 200  pm.process_idle_timeout = 10s;  pm.max_requests = 1000  pm.status_path = /fpmstatus  ping.path = /ping  ping.response = pong  slowlog = /var/log/php-slow-$pool.log  request_slowlog_timeout = 10  request_terminate_timeout = 0  rlimit_files = 655350  security.limit_extensions = .php  EOF  
三、基于以上配置PHP网站
mkdir /usr/local/nginx/conf/vhost  
cat << EOF > /usr/local/nginx/conf/vhost/erbiao.ex.com.conf  server  {  listen 80 backlog=1024;  server_name erbiao.ex.com;  index index.php index.html ;  root /www/web/;  access_log off;  add_header Server-Name WEBerbiaoEX;    location ~ .php {  fastcgi_pass unix:/dev/shm/php-fpm.sock;  fastcgi_index index.php;  include fastcgi.conf;  set $real_script_name $fastcgi_script_name;  if ($fastcgi_script_name ~ "^(.+?.php)(/.+)$") {  set $real_script_name $1;  set $path_info $2;  }  fastcgi_param SCRIPT_FILENAME $document_root$real_script_name;  fastcgi_param SCRIPT_NAME $real_script_name;  fastcgi_param PATH_INFO $fastcgi_path_info;      location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$  {  expires 30d;  }    location ~ .*.(js|css)?$  {  expires 12h;  }    }    }  EOF  

若在同一服务器运行nginx和php-fpm,并发量不超过1000,选择unix socket,如此可避免一些检查操作(路由等),因此更快,更轻。若是高并发业务,则选择使用更可靠的tcp socket,以负载均衡、内核优化等运维手段维持效率

四、启动服务

启动nginx和php-fpm

/usr/local/nginx/sbin/nginx  /usr/local/php-fpm/sbin/php-fpm  

命令其他选项

nginx  ├── -s选项,向主进程发送信号  |   ├── reload参数,重新加载配置文件  |   ├── stop参数,快速停止nginx  |   ├── reopen参数,重新打开日志文件  |   ├── quit参数,Nginx在退出前完成已经接受的连接请求  ├── -t选项,检查配置文件是否正确  ├── -c选项,用于指定特定的配置文件并启动nginx  ├── -V选项(大写),显示nginx编译选项与版本信息    php-fpm  ├── -t选项,检查配置文件是否正确  ├── -m选项,显示所有已安装模块  ├── -i选项,显示PHP详细信息  ├── -v选项,显示版本信息  

原文出处:cnblogs -> https://www.cnblogs.com/erbiao/p/9237851.html

本站所发布的一切资源仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如果侵犯你的利益,请发送邮箱到 [email protected],我们会很快的为您处理。