参考资料:
安装
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 |