参考资料:
安装
apt安装
推荐使用apt安装,在参考的博客中有一种手动安装的方式,看着挺麻烦,有机会再试吧。
1 | sudo apt-get update |
安装好的文件位置:
/usr/sbin/nginx:主程序
/etc/nginx:存放配置文件
/usr/share/nginx:存放静态文件(好像是旧版本用的)
/var/www/html:默认设置的静态文件目录
/var/log/nginx:存放日志
关于文件位置,其实从上面的根目录文件夹可以知道,Linux系统的配置文件一般放在/etc,日志一般放在/var/log,运行的程序一般放在/usr/sbin或者/usr/bin。
还有一个好处,创建好的文件由于放在/usr/sbin目录下,所以能直接在终端中使用nginx命令而无需指定路径。
常用命令
使用apt-get安装nginx后,会自动创建服务,会自动在/etc/init.d下新建服务脚本nginx,可以在终端中使用如下命令进行操作:
1 | sudo service nginx {start|stop|restart|reload|force-reload|status|configtest|rotate|upgrade} |
启动服务
通过系统服务命令启动:
1 | sudo service nginx start |
直接运行二进制启动:
1 | sudo nginx |
两种启动方式有所区别,前者使用服务命令启动,可以通过配套的命令service nginx status查看运行状态,后者直接定位到nginx的二进制文件运行,无法查看运行状态。
1 | which nginx |
无论是哪种方式,都会创建/run/nginx.pid用来记录进程PID,但是会有个bug:
当使用二进制文件启动nginx后,再使用service nginx start启动,会提示启动失败,此时会自动删除/run/nginx.pid,尽管此时nginx仍在运行。退出的命令如:nginx -s stop、service nginx stop,都无法生效,此时只能找到nginx对应的进程PID,将其删除:
1 | netstat -nap | grep nginx |
查看运行状态
只有通过命令service nginx start启动的服务可以查看运行状态,对应命令service nginx status。
1 | service nginx status |
直接运行nginx启动的服务无法查看运行状态。
重新加载服务
重新加载服务的命令依赖于
/run/nginx.pid,无论是哪种方式启动的服务,只要该文件存在,都可以重新加载服务。
修改配置后重新加载时
1 | sudo service nginx reload |
reload和restart的区别:前者会在更新配置文件时检查,若配置文件语法出错则保持原先状态不变,不会导致服务中断;后者先执行stop后执行start,会造成服务中断,且不会对语法进行检查,若有错则直接导致启动失败;reload操作可以通过服务service,也可以通过给命令nginx发送信号-s reload执行。
退出服务
退出服务的命令同样依赖于
/run/nginx.pid,无论是哪种方式启动的服务,只要该文件存在,都可以通过以下命令退出服务。
直接停止,不管是否有请求没处理完:
1 | sudo service nginx stop |
有序退出,等待请求处理完毕:
1 | sudo nginx -s quit |
服务器配置
查看和测试配置文件
查看并测试配置文件,主要检查语法错误
1 | sudo nginx -t |
指定配置文件路径
1 | sudo nginx -t -c /home/me/a.conf |
设置配置文件
通过sudo service nginx start或者sudo nginx启动服务时,默认的配置文件为/etc/nginx/nginx.conf。
如何修改呢?通过nginx命令启动时,修改方式为添加参数-c:
1 | sudo nginx -c /etc/nginx/nginx.conf |
通过服务启动的话网上资料比较少,且不建议这么修改,最新版本nginx配置是由4个文件构成:
conf.d:用户自己定义的conf配置文件sites-available:系统默认设置的配置文件sites-enabled:由sites-available中的配置文件转换生成nginx.conf:汇总以上三个配置文件的内容,同时配置我们所需要的参数
在部署需要的web服务时,我们可以拷贝sites-enabled中的default文件到conf.d并且修改名字为**.conf,然后进行配置。
在nginx.conf中主要进行服务器的全局设置,关于http服务的部署被剥离出去,由其他三个文件夹决定。在nginx.conf中引入conf.d和sites-enabled两个文件夹中的服务器配置,引入顺序如下所示:
1 | http { |
也就是说,服务器配置的东西被写到了http字段下。观察文件夹发现,conf.d文件夹默认为空,sites-enabled文件夹中只有一个default文件,这里面写了基础的服务器配置,包括端口、首页、404页面。
如果在conf.d文件夹中添加服务器配置,那么也不会覆盖掉端口为80的服务端配置,如果要对默认的服务器配置进行修改,最好的办法是把default文件内容复制到另一个文本文件中,命名为xxx.conf放到conf.d中,然后在nginx.conf中把语句include /etc/nginx/sites-enabled/*;注释掉。
静态服务器配置
1 | # Default server configuration |
关于index,类似于指定了一个页面入口。若不指定,只有通过192.168.0.1/index.html才能访问页面,直接通过192.168.0.1会提示403。
通过如上配置,可以在目录/var/www/html中放置任何html静态页面,并支持文件夹。
反向代理
代理域名
只需要加上server_name,即可代理域名
1 | server { |
代理请求
设置了一个静态文件夹,放在3303端口,用80端口的/app路由来代理这个端口。
1 | # Default server configuration |
location和proxy_pass设置的讲究
1 | server { |
在lcoation都是location /api/时,proxy_pass不同,请求的资源也是不一样的:
| proxy_pass | 请求 | 转发结果 |
|---|---|---|
proxy_pass http://localhost:8081; |
hostname:8080/api/user/list |
http://locahost:8081/api/user/list |
proxy_pass http://localhost:8081/; |
hostname:8080/api/user/list |
http://locahost:8081/user/list |
proxy_pass http://localhost:8081/test; |
hostname:8080/api/user/list |
http://locahost:8081/testuser/list |
proxy_pass http://localhost:8081/test/; |
hostname:8080/api/user/list |
http://locahost:8081/test/user/list |