centos7安装nginx比较麻烦,还是docker安装比较香。
dokcer安装nginx比较简单,而且教程很多,那为什么还要总结?
这篇文章主要是规范化nginx对项目的反向代理,明显的特征是一个项目一个"项目名.conf"的配置文件,方便于同一管理。
docker正常安装nginx比较简单,如下:
下载镜像
docker pull nginx
这里不加版本,默认下载最新版本
运行容器
docker run -p 80:80 --name nginx -v /root/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /root/nginx/logs:/var/log/nginx -d nginx
将nginx的配置文件和日志文件挂载到容器里。
像这样正常安装nginx,宿主机和容器映射端口,指定目录挂载文件,在后续会带来很多的问题,存在很多的缺点:
/etc/nginx/nginx.conf
,如果项目很多很多的话,那么这个文件当中,将会有大量的Server配置,不方便项目管理。所以可以采用容器共享宿主机端口,只挂载一个目录,以后再容器中建立软连接,让宿主机可以操作或者共享容器文件(类似于win10的桌面快捷方式思想),具有动态性。
docker run -it --name nginx --net host -v /root/project:/var/www/html -v /root/nginx:/nginx_conf -d nginx
命令详解:
-d
后台运行--name
容器名-v
宿主机目录与容器目录进行挂载(可以共享)-v /root/project:/var/www/html
是将宿主机/root/project
与容器/var/www/html
关联,以后所有的项目都建立在/root/project
下,因为关联在/var/www/html
,所以容器可以访问到外部的项目,方便在nginx.conf反向代理到项目(一般如果是前端项目就可代理到:/var/www/html/项目名/index.html)-v /root/nginx:/nginx_conf
是/root/nginx
放置所有的配置文件,可以在nginx容器根目录下的/nginx_conf
共享docker exec -it nginx bash
/nginx_conf
的软连接初始的时候,这个文件夹下只有一个文件default.conf
,里面的内容只有server,看到这个server这个结构,好像就是nginx.conf的server配置,所以nginx启动,可以默认访问80端口,进入默认页面。
所以,这个文件可以只用配置nginx.conf的server配置,每个项目一个“项目名.conf”文件,放到这个目录,就可以实现反向代理的效果,而且一个项目一个conf,非常方便管理。
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
location / {
root /usr/share/nginx/html;
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 /usr/share/nginx/html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
/etc/nginx/conf.d
与/nginx_conf
的软连接建立软连接的命令
ln -s 源文件/目录 目标文件/目录
如果是直接将/etc/nginx/conf.d
与/nginx_conf
的建立软连接,会出现一个问题,如下图:
到宿主饥访问的时候,说conf.d不是一个文件或者文件夹,类比win10可能是类似于快捷方式一样的东西(linux学的还不到位~~)
所以可以采用一个替代方案:将/etc/nginx/conf.d
移动到/nginx_conf
,在/nginx_conf/conf.d
建立与/etc/nginx
的软连接,这样即可实现既定需求。
代码:
mv /etc/nginx/conf.d /nginx_conf
ln -s /nginx_conf/conf.d /etc/nginx
即可发现在宿主机/root/nginx
下看到conf.d文件夹,而且也没有显示红色
/etc/nginx/nginx.conf
与/nginx_conf
的软连接nginx.conf也是经常使用,即也采用上述方式建立软连接。
mv /etc/nginx/nginx.conf/nginx_conf
ln -s /nginx_conf/nginx.conf /etc/nginx
所以之后在写docker的文件挂在,就可以预先挂在一个空的目录,在使用这样的“反向软连接”的方式,实现动态文件共享。
如果是nginx的docker容器,重启可以使用docker restart nginx
,但是这样的启动方式有很大的缺点,如果nginx启动有问题,不能很清楚的知道问题在哪,而且不能正常访问nginx。
推荐nginx启动方式:
nginx -t
命令,测试配置文件是否有问题nginx -s reload
重启nginx服务如果没有问题,就可以进行访问测试了
至此nginx配置结束,其余就是项目配置了
/root/project
与nginx容器/var/www/html
挂载,以后所用项目都放在宿主机/root/project
下统一管理,也方便nginx统一进行反向代理/root/nginx
与nginx容器/nginx_conf
挂载,所有与nginx相关配置全部放在/root/nginx
下统一管理/nginx_conf
,通过"反向软连接",实现动态文件/目录与宿主机共享。而不是像以前一样,运行容器定死挂载目录。如果有挂载目录变动,需要重新运行一个新的容器(运行后的容器,要在更改这些配置,就很容易出错和出现问题)。规范性、兼容性、扩展性…思想要慢慢养成…