本文主要介绍在centos7系统使用源码和docker镜像两种方式安装和配置Nginx,并列出其中可能遇到的坑
使用源码安装
1、安装编译库和依赖库
yum install -y gcc
yum install -y pcre pcre-devel
yum install -y zlib zlib-devel
yum install -y openssl openssl-devel
2、下载Nginx安装包
访问http://nginx.org/en/download.html下载自己想要的版本,拷贝下载链接,使用wget命令下载,也可以直接用我这个版本
wget http://nginx.org/download/nginx-1.9.9.tar.gz
3、解压
tar -zxvf nginx-1.9.9.tar.gz
4、编译安装
进入解压出来的文件夹内执行命令编译
./configure make && make install
编译完成后会在/usr/local/目录下生成 nginx 文件夹
5、修改配置文件
vi /usr/local/nginx/conf/nginx.conf
主要修改以下几处:
user root;此处有坑:默认注释掉了,即使你用root用户启动Nginx但是worker process的用户还是普通用户,会导致读取静态资源及写入log无权限
error_log /var/log/nginx/error.log; 默认注释了,错误日志存放路径,如果文件夹不存在需要自己创建
access_log /var/log/nginx/access.log; 同上
server{ } 中的配置比较重要,默认监听80端口,可以不用改,location里面是静态资源加载地址,需要改为自己html文件所在路径
添加注释的部分是需要自己修改的,具体如下
user root; # 启动Nginx的用户,普通用户可能会导致打开日志或静态文件无权限 worker_processes 1;error_log /var/log/nginx/error.log; # error日志路径 #error_log logs/error.log notice; #error_log logs/error.log info;#pid logs/nginx.pid;events {worker_connections 1024; }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 /var/log/nginx/access.log; sendfile on;#tcp_nopush on;#keepalive_timeout 0;keepalive_timeout 65;#gzip on;server {listen 80; # 监听端口server_name localhost;#charset koi8-r;#access_log logs/host.access.log main;location / {root /home/centos/dist; # 你的前端资源文件路径index index.html index.htm; # 默认可以不用改}#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; }}}
6、检查配置并启动Nginx
cd /usr/local/nginx/sbin ./nginx -t # 用于检查配置文件格式是否正确,如果正确显示如下图
#启动Nginx ./nginx ./nginx -s reload # 重启
使用docker安装
1、拉取镜像
docker pull nginx
2、先run起来一个测试一下
sudo docker run --name test_nginx -p 8081:80 -d nginx
然后用docker ps 命令查一下是否启动成功
浏览器访问 Nginx服务器IP:8081
这里应该是没有问题,如果访问不了,尝试下关闭防火墙,然后重启docker
# centos7 查看防火墙状态 firewall-cmd --state# 关闭防火墙 systemctl stop firewalld.service# 重启docker service docker restart
3、上一步测试成功之后,创建目录拉取默认的配置文件,然后删除启动的测试容器
创建目录,用于放置配置文件和静态文件,可以换成自己想要的目录
mkdir -p /usr/local/nginx/conf mkdir -p /usr/local/nginx/www
查看已启动的 docker 容器:
docker ps
拷贝容器内 Nginx 默认配置文件到自己的目录
sudo docker cp 容器ID:/etc/nginx/nginx.conf /usr/local/nginx/conf
停止需要删除的容器:
docker stop 容器ID
删除容器:
docker rm 容器ID
4、启动自己项目要用的Nginx并配置
sudo docker run -dit -p 8081:80 --name nginx -v /usr/local/nginx/html:/usr/share/nginx/html -v /usr/local/nginx/conf/nginx.conf:/etc/nginx/nginx.conf nginx /bin/bash
参数-v 表示挂载文件或目录,左边为宿主机位置,右边为容器位置
-it 参数交互运行
-d 参数后台运行
此处有大坑:
我用镜像启动测试容器没有任何问题,但是挂载了宿主机路径之后,启动容器成功立马就退出,没有任何报错,最后查了资料发现下面解释:docker容器运行必须有一个前台进程, 如果没有前台进程执行,容器认为空闲,就会自行退出
所以加了-dit 和后面的bin/bash参数,然后启动成功了
此处又有坑:
启动成功之后访问 IP:端口,发现无法访问,ps -ef | grep nginx 发现并没有Nginx进程,docker ps 发现容器运行正常,没办法只能去容器内查看了
使用容器交互式命令
docker exec -it 容器ID bash
启动Nginx
/usr/sbin/nginx
退出 再次ps -ef | grep nginx 服务发现已经起来了
然后浏览器输入IP:8081出现403页面,这说明服务已经启动了,只是配置没有修改,加载不到静态文件
5、最后就是修改配置了,具体修改的地方跟上面使用源码安装差不多,这里就不再放了
修改完之后重启容器
docker restart nginx
原文链接:https://www.ngui.cc/el/184017.html