CentOS7 nginx+php-fpm 环境安装

SELinux

  1. 查看
    1. getenforce/usr/sbin/sestatus -v
    2. Enforcing 是启用,Disabled 是禁用
  2. 永久关闭
    1. 编辑文件 /etc/selinux/config
    2. SELINUX=enforcing 改为 SELINUX=disabled
    3. 重启

启用网络

  1. 查看网络连接:ip addr

  2. 编辑文件 /etc/sysconfig/network-scripts/ifcfg-ens33ens33 是网络名称)

  3. ONBOOT=no 改为 ONBOOT=yes

  4. 使用静态IP(可跳过)

    1. 修改 BOOTPROTO=dhcpBOOTPROTO=static

    2. 追加以下代码(使用自己的IP信息)

      IPADDR=192.168.1.200
      NETMASK=255.255.255.0
      GATEWAY=192.168.1.1
      DNS1=114.114.114.114
      DNS2=8.8.8.8
      
  5. 重启网络服务 systemctl restart network

防火墙

  1. 停止 sudo systemctl stop firewalld.service
  2. 禁用(谨慎) sudo systemctl disable firewalld.service

Remi 和 EPEL 扩展包

sudo yum install epel-release yum-utils

bash自动补全

sudo yum install bash-completion

安装 nginx

安装:

sudo yum install nginx
sudo systemctl enable nginx

注意:如果以上安装不能正常进行,可能需要先补源。新建 /etc/yum.repos.d/nginx.repo 文件,添加以下内容,再尝试上述命令。

[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key

[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key

安装PHP

sudo yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm
// 以下三选一
sudo yum-config-manager --enable remi-php70
sudo yum-config-manager --enable remi-php71
sudo yum-config-manager --enable remi-php72
sudo yum install php php-fpm php-zip php-gd php-pdo php-pdo_mysql php-xml php-mbstring php-ctype php-json php-openssl
sudo systemctl enable php-fpm

安装PHP扩展

sudo rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
sudo yum list php72w*
sudo yum install php72w-soap

配置环境

配置 php

  1. 打开 /etc/php.ini
  2. 修改 ;cgi.fix_pathinfo=1cgi.fix_pathinfo=1

配置 php-fpm (可选)

在linux中,nginx 服务器和 php-fpm 可以通过 tcp socket 和 unix socket 两种方式实现。

unix socket 是一种终端,可以使同一台操作系统上的两个或多个进程进行数据通信。这种方式需要再 nginx 配置文件中填写 php-fpm 的 pid 文件位置,效率要比 tcp socket 高。

tcp socket 的优点是可以跨服务器,当 nginx 和 php-fpm 不在同一台机器上时,只能使用这种方式。windows 系统只能使用 tcp socket 的通信方式。

php-fpm 默认使用 tpc socket ,以下是修改为 unix socket 方式的配置。

  1. 打开 /etc/php-fpm.d/www.conf
  2. 修改以下配置:
原配置
listen = 127.0.0.1:9000
修改为
listen = /var/run/php-fpm/php-fpm.sock
# sock文件放在 /dev/shm 目录下有助于性能提升,此目录位于内存中

原配置
;listen.owner = nobody
;listen.group = nobody
;listen.mode = 0660
修改为
listen.owner = nginx
listen.group = nginx
listen.mode = 0660
  1. 重载 systemctl restart php-fpm.service

配置 nginx

  1. /etc/nginx/config.d/ 目录下创建 .conf 文件,例如 host.conf ,模板如下:

php-fpm 配置若不修改,应该使用 fastcgi_pass 127.0.0.1:9000;

server {
    listen          80;
    #listen          [::]:80;
    server_name     domain.name;

    root   /home/www/public;
    index  index.html index.htm index.php;

    client_max_body_size   20m;

    #access_log  /var/log/nginx/access.log main;
    #error_log   /var/log/nginx/error.log;

    location / {
        #autoindex on;
        try_files $uri $uri/ /index.php?$query_string;
    }

    #error_page  404        /404.html;
    #error_page   500 502 503 504  /50x.html;
    #location = /50x.html {
    #    root   /usr/share/nginx/html;
    #}

    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}

    location ~ \.php$ {
        #fastcgi_pass   127.0.0.1:9000;
        fastcgi_pass   unix:/var/run/php-fpm/php-fpm.sock;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }

    location ~ /\.ht {
        deny  all;
    }
}

ssl 方案(内容与上面互补):

server {
    listen          80;
    server_name     domain.name;

    rewrite ^(.*)$  https://$host$1 permanent;
}

server {
    listen 443 ssl;
    server_name     domain.name;

    root   /home/www/public;
    index  index.html index.htm index.php;

    #access_log  /var/log/nginx/access.log main;
    #error_log   /var/log/nginx/error.log;

    ssl on;
    ssl_certificate /home/ssl/ssl.pem;
    ssl_certificate_key  /home/ssl/ssl.key;
    ssl_session_timeout 5m;
    ssl_prefer_server_ciphers on;

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

    location ~ \.php$ {
        fastcgi_pass   unix:/var/run/php-fpm/php-fpm.sock;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }

    location ~ /\.ht {
        deny  all;
    }
}

判断访问权限

  1. 查看 nginx.confuser
  2. 将上一步的 user 值代替 www-data ,然后执行:sudo -u www-data stat /test/path/static
  3. 确保 stat 能显示目录信息,如果出现 权限不够 ,需要先调整权限,保证第1步中的 user 拥有权限

参考资料:

  1. https://nginx.org/en/linux_packages.html#RHEL-CentOS
  2. https://docs.lvrui.io/2017/04/01/nginx%E9%85%8D%E7%BD%AEhttp%E5%BC%BA%E5%88%B6%E8%B7%B3%E8%BD%AChttps/
  3. http://seanlook.com/2015/05/28/nginx-ssl/