在虚拟机上用nginx怎么搭建lnmp
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在虚拟机上用nginx怎么搭建lnmp相关的知识,希望对你有一定的参考价值。
参考技术A <一、参考>这里以配置2个站点(2个域名)为例,n 个站点可以相应增加调整,假设:
IP地址: 202.55.1.100
域名1 example1.com 放在 /www/example1
域名2 example2.com 放在 /www/example2
配置 nginx virtual hosting 的基本思路和步骤如下:
把2个站点 example1.com, example2.com 放到 nginx 可以访问的目录 /www/
给每个站点分别创建一个 nginx 配置文件 example1.com.conf,example2.com.conf,
并把配置文件放到 /etc/nginx/vhosts/
然后在 /etc/nginx.conf 里面加一句 include 把步骤2创建的配置文件全部包含进来(用 * 号)
重启 nginx
具体过程
下面是具体的配置过程:
1、在 /etc/nginx 下创建 vhosts 目录
mkdir /etc/nginx/vhosts
2、在 /etc/nginx/vhosts/ 里创建一个名字为 example1.com.conf
的文件,把以下内容拷进去
server
listen 80;
server_name example1.com www. example1.com;
access_log /www/access_ example1.log main;
location /
root /www/example1.com;
index index.php index.html index.htm;
error_page 500 502 503 504 /50x.html;
location = /50x.html
root /usr/share/nginx/html;
# pass the PHP scripts to FastCGI server listening on
127.0.0.1:9000
location ~ \.php$
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME
/www/example1.com/$fastcgi_script_name;
include fastcgi_params;
location ~ /\.ht
deny all;
3、在 /etc/nginx/vhosts/ 里创建一个名字为 example2.com.conf
的文件,把以下内容拷进去
server
listen 80;
server_name example2.com www. example2.com;
access_log /www/access_ example1.log main;
location /
root /www/example2.com;
index index.php index.html index.htm;
error_page 500 502 503 504 /50x.html;
location = /50x.html
root /usr/share/nginx/html;
# pass the PHP scripts to FastCGI server listening on
127.0.0.1:9000
location ~ \.php$
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME
/www/example2.com/$fastcgi_script_name;
include fastcgi_params;
location ~ /\.ht
deny all;
4、打开 /etc/nginix.conf 文件,在相应位置加入 include 把以上2个文件包含进来
user nginx;
worker_processes 1;
# main server error log
error_log /var/log/nginx/error.log ;
pid /var/run/nginx.pid;
events
worker_connections 1024;
# main server config
http
include mime.types;
default_type application/octet-stream;
log_format main ‘$remote_addr – $remote_user [$time_local]
$request ‘
‘”$status” $body_bytes_sent “$http_referer” ‘
‘”$http_user_agent” “$http_x_forwarded_for”‘;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
gzip on;
server
listen 80;
server_name _;
access_log /var/log/nginx/access.log main;
server_name_in_redirect off;
location /
root /usr/share/nginx/html;
index index.html;
# 包含所有的虚拟主机的配置文件
include /usr/local/etc/nginx/vhosts/*;
5、重启 Nginx
/etc/init.d/nginx restart
</参考>
<二、我的实例>
--------- vhosts/led.conf
server
listen
80;
server_name
www.led.com
index
index.html index.htm index.php;
root /usr/local/vhost/led;
#charset koi8-r;
#access_log
logs/host.access.log main;
location /
root /usr/local/vhost/led;
index index.html index.htm
index.php;
#error_page
404
/404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503
504 /50x.html;
location = /50x.html
root html;
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$
#
proxy_pass
http://127.0.0.1;
#
location ~
.*\.(php|php5)?$
#fastcgi_pass unix:/tmp/php-cgi.sock;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME
/scripts$fastcgi_script_name;
include
fastcgi_params;
location ~
.*\.(gif|jpg|jpeg|png|bmp|swf)$
expires 30d;
location ~ .*\.(js|css)?$
expires 1h;
log_format
access '$remote_addr - $remote_user [$time_local] "$request"
'
'$status $body_bytes_sent "$http_referer"
'
'"$http_user_agent"
$http_x_forwarded_for';
---------------- nginx.conf
user
nginx nginx;
worker_processes 8;
error_log logs/error.log;
#error_log logs/error.log
notice;
#error_log logs/error.log
info;
pid
/usr/local/nginx/nginx.pid;
worker_rlimit_nofile 65535;
events
use
epoll;
worker_connections 65535;
http
include
mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr
- $remote_user [$time_local] "$request" '
#
'$status $body_bytes_sent "$http_referer" '
#
'"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log
main;
server_names_hash_bucket_size 128;
client_header_buffer_size 32k;
large_client_header_buffers 4 32k;
client_max_body_size 8m;
sendfile
on;
tcp_nopush
on;
#keepalive_timeout 0;
keepalive_timeout 65;
tcp_nodelay
on;
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 64k;
fastcgi_buffers 4 64k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size
128k;
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.0;
gzip_comp_level 2;
gzip_types text/plain
application/x-javascript text/css application/xml;
gzip_vary
on;
server
listen
80;
server_name
_;
server_name_in_redirect off;
location /
root
/usr/share/nginx/html;
index
index.html;
#
包含所有的虚拟主机的配置文件
include
/usr/local/nginx/conf/vhosts/*;
本回答被提问者采纳 参考技术B 可以下载一个epel的yum源 +通过命令yum install -y nginx mysql mysql-server php
可以通过源码部署
LNMP环境搭建
经过一番折腾,终于将LNMP环境搭建完成了。本文介绍的LNMP环境是在windows的Oracle VM VirtualBox中的Centos虚拟机上搭建的,各个软件的版本为:Centos7 + Nginx1.12.2 + Mysql-5.6.38 + PHP7.2.0。本文是在假设Centos7虚拟机已经安装完成的前提下进行介绍的,若尚未安装,可以前往Centos官网下载对应的ios文件安装,我下载的是这个:http://mirrors.tuna.tsinghua.edu.cn/centos/7/isos/x86_64/CentOS-7-x86_64-DVD-1708.iso,然后按照网上的教程进行安装就可以了,教程实例:https://jingyan.baidu.com/article/9c69d48f8ec01613c8024e58.html。
Centos7虚拟机安装完成就可以开始编译安装Nginx、Mysql和PHP了,下面容我一一道来。
一、安装前
1. 更新系统软件:
yum update
2. 查看是否已安装wget:
rpm -qa wget
否则安装:
yum install wget
3. 查看是否已安装编译器:
rpm -qa gcc
否则安装:
yum install gcc gcc-c++
二、安装Nginx
1. 安装nginx依赖包
nginx的Rewrite模块和HTTP核心模块会使用到PCRE正则表达式语法:
yum -y install pcre pcre-devel
nginx的各种模块中需要使用gzip压缩:
yum -y install zlib zlib-devel
安全套接字层密码库:
yum -y install openssl openssl-devel
2. 下载nginx包并解压(到/usr/local/src目录中)
cd /usr/local/src
wget http://nginx.org/download/nginx-1.12.2.tar.gz
tar -zxvf nginx-1.12.2.tar.gz
3. 编译安装(到/usr/local/nginx目录中)
cd nginx-1.12.2
./configure --prefix=/usr/local/nginx
make
make install
4. 创建并设置nginx运行账号:
groupadd nginx
useradd -M -g nginx -s /sbin/nologin nginx
cd /usr/local/nginx/conf
vim nginx.conf,设置user参数如下:
user nginx nginx
其他配置参数暂时无需改动。
5. 设置nginx为系统服务
vim /lib/systemd/system/nginx.service
文件内容:
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s stop
PrivateTmp=true
[Install]
WantedBy=multi-user.target
6. 设置nginx开机自启动
systemctl enable nginx.service
7. 开启nginx服务:
systemctl start nginx.service
查看nginx是否启动成功:
ps aux | grep nginx
在虚拟机浏览器中访问测试:
http://localhost
出现以下界面则表示可以成功访问:
8. 防火墙开放80端口(nginx默认使用80端口,可在nginx.conf中配置,若无需进行远程访问则不需要开放端口)
永久开放80端口:
firewall-cmd --zone=public --add-port=80/tcp --permanent
重启防火墙:
firewall-cmd --reload
查看防火墙开启状态:
systemctl status firewalld
查看80端口是否开放成功:
firewall-cmd --zone=public --query-port=80/tcp
可在windows宿主主机浏览器直接访问虚拟机ip测试是否可以成功访问。
三、安装Mysql
1. 卸载已有mysql
查看是否已安装mysql:
rpm -qa mysql
有则卸载:
rpm -e --nodeps 文件名称
是否存在与mysql相关的文件或目录:
whereis mysql
是则删除。
查看是否存在mariadb:
rpm -qa | grep mariadb
存在则卸载:
rpm -e --nodeps 文件名 //文件名是上一个命令查询结果
存在/etc/my.cnf,则需要先删除:
rm /etc/my.cnf
2. 安装编译mysql需要的依赖包
yum install libevent* libtool* autoconf* libstd* ncurse* bison* openssl*
3. 安装cmake(mysql5.5之后需要用cmake支持编译安装)
查看是否已安装cmake:
rpm -qa cmake
没有则下载编译安装:
cd /usr/local/src
wget http://www.cmake.org/files/v2.8/cmake-2.8.12.1.tar.gz
tar -xf cmake-2.8.12.1.tar.gz
cd cmake-2.8.12.1
./configure
make
make install
检查cmake是否安装成功:
cmake --version
4. 下载mysql包并解压(到/usr/local/src目录)
cd /usr/local/src
wget http://cdn.mysql.com/Downloads/MySQL-5.6/mysql-5.6.38.tar.gz
tar -zxvf mysql-5.6.38.tar.gz
5. 编译安装(到/usr/local/mysql目录)
cd mysql-5.6.38
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/usr/local/mysql/data -DSYSCONFDIR=/etc -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_MEMORY_STORAGE_ENGINE=1 -DWITH_READLINE=1 -DMYSQL_UNIX_ADDR=/var/lib/mysql/mysql.sock -DMYSQL_TCP_PORT=3306 -DENABLED_LOCAL_INFILE=1 -DWITH_PARTITION_STORAGE_ENGINE=1 -DEXTRA_CHARSETS=all -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci
make(此过程需花费大概20-30分钟)
make install
6. 配置mysql
groupadd mysql
useradd -M -g mysql -s /sbin/nologin mysql
chown -R mysql:mysql /usr/local/mysql
7. 初始化配置
cd /usr/local/mysql/scripts
./mysql_install_db --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --user=mysql
8. 设置mysql为系统服务
vim /lib/systemd/system/mysql.service
文件内容:
[Unit]
Description=mysql
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/mysql/support-files/mysql.server start
ExecStop=/usr/local/mysql/support-files/mysql.server stop
ExecRestart=/usr/local/mysql/support-files/mysql.server restart
ExecReload=/usr/local/mysql/support-files/mysql.server reload
PrivateTmp=true
[Install]
WantedBy=multi-user.target
9. 设置mysql服务开机自启动
systemctl enable mysql.service
10. 启动mysql
systemctl start mysql.service
若是启动失败:
直接使用/usr/local/mysql/support-files/mysql.server restart启动可以看到详细错误原因:
若是这个原因,/var/lib/mysql这个目录(用于存放mysql.sock)不存在的话,手动创建就好了:
mkdir /var/lib/mysql
chown -R mysql:mysql /var/lib/mysql
再次启动,成功了!
查看是否启动成功:
ps aux | grep mysql
11. 登录mysql并设置root密码:
/usr/local/mysql/bin/mysql -u root
set password=password(‘123456‘);
四、安装PHP
1. 安装php依赖包
yum install libxml2 libxml2-devel openssl openssl-devel bzip2 bzip2-devel libcurl libcurl-devel libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel gmp gmp-devel libmcrypt libmcrypt-devel readline readline-devel libxslt libxslt-devel
若提示yum中没有可用的软件包libmcrypt和libmcrypt-devel,则需要手动编译安装,可以先在windows宿主主机中前往libmcrypt官网下载然后使用rz指令将包上传至centos7进行编译安装。我下载的包为libmcrypt-2.5.8.tar.gz:
tar -zxvf libmcrypt-2.5.8.tar.gz
cd libmcrypt-2.5.8
./configure --prefix=/usr/local/libmcrypt
make
make install
2. 下载php包并解压
cd /usr/local/src
在windows上前往php官网下载php-7.2.0包,然后使用rz指令将下载好的php安装包上传到centos7上,解压:
tar -zxvf php-7.2.0.tar.gz
3. 编译安装(到/usr/local/php目录)
cd php-7.2.0
./configure --prefix=/usr/local/php --disable-fileinfo --enable-fpm --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d --with-openssl --with-zlib --with-curl --enable-ftp --with-gd --with-xmlrpc --with-jpeg-dir --with-png-dir --with-freetype-dir --enable-gd-native-ttf --enable-mbstring --with-mcrypt=/usr/local/libmcrypt --enable-zip --enable-mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-mysql-sock=/var/lib/mysql/mysql.sock --without-pear --enable-bcmath
(注意:--with-mcrypt参数指定的是libmcrypt的安装目录。Php7不再使用mysql的库来支持mysql的连接,而是启用了mysqlnd来支持,所以php7的编译已经不再使用--with-mysql参数指定mysql的安装位置了,若想支持mysql,需要设置--enable-mysqlnd、--with-mysqli和--with-pdo-mysql=mysqlnd参数,--with-mysql-sock指定的是编译mysql时-DMYSQL_UNIX_ADDR参数指定的文件)
make(此过程需花费大概20分钟)
make install
4. 将php包解压目录中的配置文件放置到正确位置(configure命令中的--with-config-file-path设置的位置)
cp php.ini-development /etc/php.ini
5. 创建并设置php-fpm运行账号
groupadd www-data
useradd -M -g www-data -s /sbin/nologin www-data
cd /usr/local/php/etc
cp php-fpm.conf.default php-fpm.conf
vim php-fpm.conf
发现搜索不到“user”(设置运行账号的位置),但发现文件的最后一行:
所以:
cd php-fpm.d
cp www.conf.default www.conf(否则include匹配不到文件)
vim www.conf
搜索“user”设置运行账号:
user=www-data
group=www-data
6. 配置nginx支持php
vim /usr/local/nginx/conf/nginx.conf
修改完成之后记得重启nginx服务:
systemctl start nginx.service
7. 设置php-fpm为系统服务:
vim /etc/systemd/system/php-fpm.service
文件内容:
[Unit]
Description=php-fpm
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/php/sbin/php-fpm
PrivateTmp=True
[Install]
WantedBy=multi-user.target
8. 设置php-fpm服务开机自启动:
systemctl enable php-fpm.service
9. 启动php-fpm:
systemctl start php-fpm.service
查看是否启动成功:
ps aux | grep php-fpm
10.写一个php脚本测试nginx是否已支持php,php是否已支持mysql。
1
2
|
<?php phpinfo(); |
至此,LNMP搭建完成!
PHP扩展安装说明:
若想安装一些PHP扩展,首先可以在PHP源码目录下的ext子目录中查找是否存在你想安装的扩展,不存在则下载,存在则直接进入扩展源码目录进行安装操作,下面以安装pcntl扩展为例进行说明。
首先编译源码安装pcntl扩展:
cd /usr/local/src/php-7.0.27/ext/pcntl (进入扩展源码目录)
/usr/local/php/bin/phpize(取决于你安装php之后phpize文件的位置)
./configure --with-php-config=/usr/local/php/bin/php-config(取决于你安装php之后php-config文件的位置)
make
make install
然后修改php配置文件:
vim /etc/php.ini
extension=pcntl.so
最后重启php-fpm服务:
systemctl reload php-fpm.service
这样pcntl就安装完成了!
有个疑惑的地方,刚开始想安装mysql5.7.20的,但是在编译(make)的时候,真的很慢,有时候卡了大半天都不动的,不知道啥原因,试了很多次,浪费了很多时间啊,泪奔。最后实在受不了,改用mysql5.6.38,30分钟不到就编译完成了,阿西吧,有时候还是不要太纠结。。。
以上是关于在虚拟机上用nginx怎么搭建lnmp的主要内容,如果未能解决你的问题,请参考以下文章