ubuntu系统下使用apt-get安装的nginx,其他系统或安装方式会有差异。

nginx各目录分布

1.配置文件目录:/etc/nginx

nginx objs目录源文件生成不全 nginx web目录_html


其中/etc/nginx/nginx.conf为主配置文件,sites-available主要用于配置server段,后面会有介绍

2.启动/重启/关闭文件:/etc/init.d/nginx

/etc/init.d/nginx stop
/etc/init.d/nginx start
/etc/init.d/nginx reload

3.执行文件:/usr/sbin/nginx
4.web目录:/var/www

一:多端口部署项目

1.打开安全组添加入方向规则

nginx objs目录源文件生成不全 nginx web目录_nginx_02


这里以自定义了7000端口为例

2.防火墙中开启对应端口

进入linux命令之后,首次使用需要安装firewall

sudo apt install firewalld

查看所有打开的端口:

firewall-cmd --zone=public --list-ports

添加自定义的端口:

firewall-cmd --zone=public --add-port=7000/tcp --permanent (–permanent永久生效,没有此参数重启后失效)

注意,添加后需要重新载入才能生效

firewall-cmd --reload

查看是否生效:

firewall-cmd --zone=public --query-port=7000/tcp

3.web目录与sites-enabled

前面我们提到web存放目录是:/var/www,里面默认有一个html目录,在我们安装完nginx时直接再浏览器输入ip或域名,默认会到80端口,并展示一个welcom to nginx的界面,就是来自于/var/www/html/index.nginx-debian.html这个文件。为什么会默认到这个文件,是在哪里配置的呢,打开/etc/nginx/nginx.conf主配置文件会发现在http内有这么一句代码:

nginx objs目录源文件生成不全 nginx web目录_ubuntu_03


如果所有server配置都写在 nginx.conf 主配置文件中,项目都哦了难免会显得杂乱与臃肿。为了方便配置文件的维护,所以需要进行拆分配置。

include /etc/nginx/sites-enabled/ 的作用就是引入/etc/nginx/sites-available/下的所有server文件,使用xftp工具查看会发现其实sites-enabled下其实是server配置文件的软链接。而实际配置其实是在/etc/nginx/sites-available/下

nginx objs目录源文件生成不全 nginx web目录_nginx objs目录源文件生成不全_04


4.sites-available中自定义文件并部署项目

如果我们要在web7000这个目录下部署多个web项目,web1,web2。让浏览器访问localhost:7000/web1时响应web1的项目,访问localhost:7000/web2时响应web2的项目

(1) 切换到/etc/nginx/sites-available目录下,ls查看当前目录的配置,默认是有一个default案例。将default复制一份,并起名为任意名字以.conf结尾的文件,注意不要使用_连接的方式,例如我当初使用web_7000.conf,发现文件执行不了。

nginx objs目录源文件生成不全 nginx web目录_nginx_05


(2) vim进入自定义的.conf文件中进行编辑,我的目录中已经自定义了web7000.conf这个文件:

nginx objs目录源文件生成不全 nginx web目录_ubuntu_06


以7000端口为例,如果你在安全组中配置了并且防火墙开放了7000端口,就可以在这里监听。listen 7000表示监听7000端口,server_name和location先不管,我们看root /var/www/web7000表示会去/var/www/web7000这个项目目录下找,我们在该目录下放一个index.html文件作为测试。

接下来保存退出创建软连接,切换到sites-enabled目录下,执行

ln -s /etc/nginx/sites-available/cust.conf

nginx objs目录源文件生成不全 nginx web目录_nginx objs目录源文件生成不全_07


然后再执行以下代码重启nginx:

/etc/init.d/nginx reload

在浏览器中输入ip:7000则会显示我们放在/var/www/web7000下的index.html文件。这样就完成了一个基本的web项目部署。

5.一个端口下部署多个项目

以上操作我们只能在7000端口下,/var/www/web7000目录下部署一个项目,如果要部署多个项目又该如何实现呢?例如浏览器输入ip:7000/web1显示项目web1,输入ip:7000/web2显示项目web2,我们的/var/www/web7000目录结构是这样

nginx objs目录源文件生成不全 nginx web目录_ubuntu_08


(1)更改/etc/nginx/sites-available/web7000.conf文件为:

nginx objs目录源文件生成不全 nginx web目录_html_09


location = /web1表示浏览器输入ip:7000/web1进入此规则,location = web2同理。里面的try_files $uri $uri/ =404存在优先级,首先找 nginx objs目录源文件生成不全 nginx web目录_linux_10uri又代表什么意思呢,浏览器输入ip:7000/web2, $uri代表的就是/web2文件,注意是web1文件; $uri/代表的是/web2目录,如果存在则会结合root去找/var/www/web7000/web2下的index.html并响应. 所以我们做了以上配置会发现浏览器中输入ip:7000/web1响应404,输入ip:7000/web2才会响应对应web2项目下的html文件。那是不是try_files $uri就没啥用了呢,

nginx objs目录源文件生成不全 nginx web目录_nginx_11


我们在浏览器端输入ip:7000/web1/index.html时, $uri解析成了web1/index.html,所以这样时能访问的,利用这个特性,我们还可以访问web1下的其他资源,比如有一张test.png图片,则可ip:7000/web1/test.png