Linux 下编译安装 Nginx,以及 Nginx 和 PHP7 协同工作

相关内容:
1. Linux 下编译安装 MySQL;
2. Linux 下编译安装 PHP7;
3. Linux 下编译安装 Nginx,以及 Nginx 和 PHP7 协同工作(本篇);
4. Linux 下编译安装 Apache;

下载 Nginx 最新的稳定版

cd /usr/local/src/
wget http://nginx.org/download/nginx-1.16.0.tar.gz

解压到 src 目录:

tar zxvf nginx-1.16.0.tar.gz

编译安装前解决依赖关系:

# CentOS
yum install -y pcre-devel openssl-devel zlib-devel

# Ubuntu
apt-get install -y libpcre3 libpcre3-dev zlib1g zlib1g.dev openssl

创建守护进程用户:

useradd -M -s /sbin/nologin www

编译安装三部曲

  1. 进入解压后的源码目录:
cd /usr/local/src/nginx-1.16.0/
  1. 配置(特殊需求参考 http://nginx.org/en/docs/configure.html )
./configure --prefix=/usr/local/nginx --user=www --group=www --with-select_module \
--with-poll_module --with-http_ssl_module --with-pcre --with-pcre-jit --with-zlib= \
--pid-path=/usr/local/nginx/run/nginx.pid
make
make install

配置自动启动

  1. 新建 service 文件
vim /lib/systemd/system/nginx.service
  1. 写入如下内容
[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/run/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ExecReload=/bin/kill -s HUP $MAINPIDExecStop=/bin/kill -s QUIT $MAINPIDPrivateTmp=true

[Install]
WantedBy=multi-user.target
  1. 配置开机自动启动
systemctl enable nginx
  1. 启动服务
systemctl start nginx

# 查看服务
systemctl status nginx.service
  1. 停止服务
systemctl stop nginx

接下去,nginx.conf 配置(参数要根据实际的服务器配置,并发访问情况去优化)

# 修改前先将原本的备份

cd /usr/local/nginx/conf
mv nginx.conf nginx.conf_`date +%F`_.bak
vim /usr/local/nginx/conf/nginx.conf

写入下面内容

# 守护进程用户
user www;

# 启动进程,通常设置成和 cpu 的数量相等
worker_processes 8;

events {
	# epoll是多路复用IO(I/O Multiplexing)中的一种方式,
	# 仅用于 Linux2.6 以上内核,可以大大提高 nginx 性能
	use epoll;

	# 单个 worker process 进程的最大并发连接数
	# 并发总数理论值是 worker_processes 和 worker_connections 的乘积
	worker_connections 1024;
}

http {
	include			mime.types;
	default_type	application/octet-stream;

	# sendfile 指令指定 nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件
	# 对于普通应用,必须设为 on,下载等高 IO 的服务器可以设置成 off
	sendfile		on;
	
	# 连接超时时间
	keepalive_timeout	120;

	# 是否开启 gzip 压缩
	gzip			on;

	# 设定请求缓冲
	client_header_buffer_size	128k;
	large_client_header_buffers	4 128k;

	# 将默认的 server 删除,全部通过 conf.d 引入,按照功能将配置分开

	include conf.d/*.conf;
	
}

准备开始配置 server (虚拟主机)

  1. 创建虚拟主机存放目录,目录名称就是上面配置文件中 include 的目录
mkdir /usr/local/nginx/conf/conf.d
  1. 进入
cd /usr/local/nginx/conf/conf.d
  1. 之后有新的虚拟主机就再创建一个 xxx.conf 即可
vim test.conf
  1. 写入如下内容
server {
	
	listen		80; # 端口,一般 http 是 80
	server_name	localhost; # 一般是域名,本机就是 localhost
	index index.php index.html; # 默认可以访问的页面,按照写入的先后顺序去寻找
	root	/data/project/test; # 项目根目录

	# 防止访问版本控制内容
	location ~ .*.(svn|git|cvs) {
		deny all;
	}

	# 此处非必须,需要的时候配置
	location / {
		# Thinkphp 3.2 Url 重写
		if (!-e $request_filename) {
			# rewrite ^/(.*)$ /index.php/$1 last;
		}
		
		# Laravel 5.4 Url 重写
		# try_files $uri $uri/ /index.php?$query_string;
	}
	
	# 下面是所有关于 PHP 的请求都转给 php-fpm 去处理
	location ~ \\.php {

		# 注意:unix sock 和 ip,两种方式只能选择一种

		# 基于 unix sock 访问,Ubuntu Apt 方式安装的 PHP 默认是以 sock 方式启动
		# fastcgi_pass	unix:/run/php/php7.0-fpm.sock;

		#基于 ip 访问
		fastcgi_pass	127.0.0.1:9000;
		
		fastcgi_split_path_info ^(.+\\.php)(.*)$;
		fastcgi_param PATH_INFO $fastcgi_path_info;
		fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
		fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
		include		fastcgi_params;
	}
	
	fastcgi_intercept_errors on;
	# 日志保存目录,一般按照项目单独保存
	# access_log	logs/localhost_access.log access;
	
}
  1. 建立项目目录
mkdir -p /data/project/test
cd /data/project/test
vim index.php

#写入测试 php 代码
<?php
phpinfo();
?>
  1. 重启 nginx
/usr/local/nginx/sbin/nginx -s reload
# 或者
systemctl restart nginx
  1. 给 PHP 用户赋予写权限
ps -ef | grep php
chown -R www:www /data/project/test/
  1. 防火墙设置
# 禁用默认的firewalld
systemctl status firewalld
systemctl stop firewalld
systemctl mask firewalld
yum install iptables iptables-services iptables-utils
systemctl start iptables
systemctl status iptables

搞定!

你可能感兴趣的:(服务器配置,Linux,PHP)