以下[参考]链接,如有侵权,请联系删除,在此先感谢在网络上无私奉献的人们~
sudo yum install epel-release
sudo rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
sudo yum install php72w
sudo yum install php72w-* --skip-broken
sudo gedit /etc/php.ini
修改以下对应内容:
display_errors = off # 不显示错误信息(不输出到页面或屏幕上)
log_errors = On # 记录错误信息(保存到日志文件中)
error_log = "/var/log/php/error_log" # 填写日志路径
error_reporting = E_ALL&~E_NOTICE
sudo gedit /etc/php-fpm.d/www.conf
修改以下对应内容:
catch_workers_output = yes # 取消注释
systemctl start php-fpm
systemctl enable php-fpm # 开机启动
wget http://nginx.org/download/nginx-1.14.2.tar.gz
tar zxvf nginx-1.14.2.tar.gz
cd nginx-1.14.2/
sudo yum -y install zlib zlib-devel
sudo yum -y install pcre pcre-devel
sudo yum -y install openssl openssl-devel
sudo ./configure --with-http_ssl_module
su # 用root进行make,sudo仍会出现权限问题
make && make install
注意:因为是自行编译安装,不能用 systemctl 直接启动服务
# 如果之前已安装 Apache,先停止 Apache 服务
# systemctl stop httpd
sudo /usr/local/nginx/sbin/nginx
浏览器访问 localhost
即可看到 nginx 欢迎页面
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --zone=public --add-port=9000/tcp --permanent
firewall-cmd --reload
sudo gedit /usr/lib/systemd/system/nginx.service
插入以下内容并保存
[Unit]
Description=nginx - high performance web server
Documentation=http://nginx.org/en/docs/
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s quit
PrivateTmp=true
[Install]
WantedBy=multi-user.target
开启服务
systemctl start nginx
systemctl enable nginx # 开机启动
-
修改
nginx.conf
sudo gedit /usr/local/nginx/conf/nginx.conf
location / { root html; # 添加 index.php index index.html index.htm index.php; } ... # 去掉这部分注释 location ~ \.php$ { root html; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; # 将 /scripts 改成 $document_root fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }
-
创建
info.php
页面并测试在目录
/usr/local/nginx/html/
下建立一个 PHP 文件info.php
,加入以下代码:<?php phpinfo(); ?>
-
重启 nginx 服务
systemctl restart nginx
-
浏览器浏览:
localhost/info.php
sudo yum install httpd httpd-devel
# 如果之前已安装 Nginx,先停止 Nginx 服务
# systemctl stop nginx
systemctl start httpd
systemctl enable httpd
# 开启防火墙必要端口的访问,用于远程访问
firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --permanent --add-port=443/tcp
firewall-cmd --reload
这里是复制前面所创的页面,新建请参考本文 7. 配置 php 支持
sudo cp /usr/local/nginx/html/info.php /var/www/html/index.php
浏览器访问 localhost
即可看到 php 信息
注意:nginx 的工作进程用户要和 php-fpm 的工作进程用户保持一致,同时该用户有权限访问项目目录
-
修改
/etc/php-fpm.d/www.conf
# 设置为启动用户 user = current_user group = current_user
-
重启服务
systemctl restart php-fpm
# 新建站点配置存放目录
sudo mkdir /usr/local/nginx/conf.vhost.d
# 新建项目配置文件(如:a.conf)
sudo gedit /usr/local/nginx/conf.vhost.d/a.conf
在配置文件 a.conf
中插入项目配置并保存(多站点方式:监听不同端口或使用不同域名)
server {
# 监听 80 端口
listen 80;
# 域名,如果是任意域名,需要在 /etc/hosts 中映射该域名到 127.0.0.1
server_name test.a.com;
# 指向项目根目录
root /path/to/project/a/dir;
index index.html index.htm index.php;
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_split_path_info ^((?U).+\.php)(/?.+)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
include fastcgi_params;
}
# 禁止访问隐藏文件
location ~ /\. {
deny all;
}
}
-
映射域名
- 编辑
/etc/hosts
sudo gedit /etc/hosts
- 插入以下内容并保存
127.0.0.1 test.a.com
- 编辑
# 取消 user 的注释,设置为启动用户
user current_user;
...
http {
...
# 加载所有站点的配置文件
include /usr/local/nginx/conf.vhost.d/*.conf
}
sudo chmod 777 -R /path/to/project/a/dir
sudo setsebool -P httpd_can_network_connect_db 1
sudo setsebool -P httpd_can_network_connect 1
sudo setsebool -P httpd_read_user_content 1
restorecon -R -v /var/www
注意:彻底关闭 SELinux 会有安全隐患,建议根据错误提示进行操作
sudo systemctl restart nginx
注意:apatch 的工作进程用户要和 php-fpm 的工作进程用户保持一致,同时该用户有权限访问项目目录
参考本文 1. 修改 php-fpm 配置
参考本文 2. 创建多站点配置文件目录与文件
# 新建站点配置存放目录
sudo mkdir /etc/httpd/conf.vhost.d
# 新建项目配置文件(如:b.conf)
sudo gedit /etc/httpd/conf.vhost.d/b.conf
在配置文件 b.conf
中插入项目配置并保存(多站点方式:监听不同端口或使用不同域名)
# 监听 80 端口
<VirtualHost *:80>
# 域名,如果是任意域名,需要在 /etc/hosts 中映射该域名到 127.0.0.1
ServerName test.a.mccn.com
DocumentRoot /path/to/project/b/dir
<Directory />
Options +Includes +FollowSymLinks -Indexes
AllowOverride none
Require all granted
Order Deny,Allow
Allow from All
</Directory>
</VirtualHost>
sudo gedit /etc/httpd/conf/httpd.conf
...
# 设置为启动用户
User current_user
Group current_user
...
# 在文档尾部插入
# Load config files in the "/etc/httpd/conf.vhost.d" directory, if any.
IncludeOptional conf.vhost.d/*.conf
参考本文 4. 为项目目录赋予权限
参考本文 5. 修改 SELinux 参数
sudo systemctl restart httpd
注意:同一个端口不能同时有两个程序监听。将 nginx 作为代理服务器和 web 服务器使用,nginx 监听 80 端口,Apache 监听除 80 以外的端口,这里使用 8080 端口。因固定端口,多项目用域名区分。
参考前文修改 www.conf
nginx.conf
httpd.conf
中的 user 和 group,并重启相应服务。
此情况下,Nginx 充当 Web 服务器,参考本文 Nginx 多站点部署 配置不同域名即可。
此情况下,Nginx 充当代理服务器,转发到本服务器 8080 端口。
-
修改
httpd.conf
,监听 8080 端口,并同时启用 Apache 和 Nginx 服务sudo gedit /etc/httpd/conf/httpd.conf
... # 将 80 改成 8080 Listen 8080 ...
-
参考本文 Nginx 多站点部署,在 Nginx 下新建项目配置文件,如:
c.apache.conf
# 新建项目配置文件 sudo gedit /usr/local/nginx/conf.vhost.d/c.apache.conf
在配置文件
c.apache.conf
中插入项目配置并保存(多站点方式:使用不同域名)server { # 监听 80 端口 listen 80; # 域名,需要在 /etc/hosts 中映射该域名到 127.0.0.1 server_name test.c.apache.com; # 指向项目根目录 root /path/to/project/c/dir; index index.html index.htm index.php; # 此处 Nginx 做静态资源服务器,动态 php 请求转发到 Apache。如果 Nginx 只是单纯的做代理服务器,可将 "location ~ \.php$" 换成 "location /" location ~ \.php$ { proxy_pass http://127.0.0.1:8080; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
-
参考本文 Apache 多站点部署,在 Apache 下新建对应项目配置文件,如:
c.conf
# 新建项目配置文件 sudo gedit /etc/httpd/conf.vhost.d/c.conf
# 监听 8080 端口 <VirtualHost *:8080> # 与刚才设置的域名保持一致 ServerName test.c.apache.com DocumentRoot /path/to/project/c/dir <Directory /> Options +Includes +FollowSymLinks -Indexes AllowOverride none Require all granted Order Deny,Allow Allow from All </Directory> </VirtualHost>
-
映射相应域名后,重启 Apache 和 Nginx 服务,即可用浏览器访问该域名。
参考 CentOS 7 解决丢失nginx.pid - 个人文章- SegmentFault 思否 nginx重启 failed (98: Address already in use) - zqinghai的专栏 - CSDN博客
重新生成该文件即可
sudo /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
如果出现以下错误
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] still could not bind()
查找占用 80 端口的进程
sudo netstat -tunlp | grep 80
输出
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 20870/nginx: master
杀死占用进程(这里以 pid=20870 为例)
sudo kill 20870
再次生成 pid 文件,并重启服务
sudo /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
systemctl stop nginx
systemctl start nginx