相关内容:
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
编译安装三部曲
cd /usr/local/src/nginx-1.16.0/
./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
配置自动启动
vim /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/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
systemctl enable nginx
systemctl start nginx
# 查看服务
systemctl status nginx.service
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 (虚拟主机)
mkdir /usr/local/nginx/conf/conf.d
cd /usr/local/nginx/conf/conf.d
vim test.conf
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;
}
mkdir -p /data/project/test
cd /data/project/test
vim index.php
#写入测试 php 代码
<?php
phpinfo();
?>
/usr/local/nginx/sbin/nginx -s reload
# 或者
systemctl restart nginx
ps -ef | grep php
chown -R www:www /data/project/test/
# 禁用默认的firewalld
systemctl status firewalld
systemctl stop firewalld
systemctl mask firewalld
yum install iptables iptables-services iptables-utils
systemctl start iptables
systemctl status iptables
搞定!