Nginx基本知识

Posted 天堂1223

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nginx基本知识相关的知识,希望对你有一定的参考价值。

1.0 介绍

为了开始使用nginx开放源代码或Nginx Plus,你必须首先在系统中安装它并且学习一些基础知识。在该章节中,你将会学习如何安装Nginx,主配置文件在哪里,并且管理员使用的相关命令。你也将会学习如何去验证你的安装并向默认服务器如何发送请求。

1.1 在Debian/Ubuntu中安装

问题

你需要在一个Debian或Ubuntu机器上安装Nginx源码。

解决办法

创建一个包含下列内容名称为*/etc/apt/sources.list.d/nginx.list*:

deb http://nginx.org/packages/mainline/OS/ CODENAME nginx
deb-src http://nginx.org/packages/mainline/OS/ CODENAME nginx

修改这个文件,依赖你的发行版,使用ubuntu或debian来代替上述URL地址后面的OS。使用你发行版的代码名称替换CODENAMEjessiestretch用户Debian,或trusty, xenial, artful或bionix用于ubuntu。然后,运行下面的命令:

wget http://nginx.org/keys/nginx_signing.key
apt-key add nginx_signing.key
apt-get update
apt-get install -y nginx
/etc/init.d/nginx start

讨论

你刚刚创建的文件指导了apt的包管理系统来使用官方的Nginx包仓库。使用的命令是下载Nginx GPG的签名包,并且引入到apt中。提供给apt的签名密钥能够使apt系统验证来自仓库的包。apt-get update命令指导apt系统从他知道的仓库中刷新包列表。当包列表被刷新之后,你可以从Nginx官网仓库中安装Nginx源码。当你安装之后,最后的命令用于启动Nginx。

1.2 在RedHat/CentOS中安装

问题

你需要在RedHat或CentOS中安装Nginx源码。

解决办法

创建包含下列内容名称为/etc/yum.repos.d/nginx.repo:


[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/mainline/OS/OSRELEASE/$basearch/
gpgcheck=0
enabled=1

修改这个文件,依赖于你的发行版使用rhel或centos替换URL地址最后的OS。对于版本6.x或7.x各自版本使用6或7替换OSRELEASE。然后,运行下面的命令:


yum -y install nginx
systemctl enable nginx
systemctl start nginx
firewall-cmd --permanent --zone=public --add-port=80/tcp
firewall-cmd --reload

讨论

你刚刚创建的文件是用于指导yum包管理系统去使用Nginx官方源码仓库。后面使用的命令用于从官方仓库中安装Nginx源码,指导系统在启动的时候使能Nginx,并且告诉他现在启动Nginx。firewall命令打开TCP协议的80端口,这是Http默认的端口。最后的命令重新加载防火墙来提交更改。

1.3 关键文件,命令和目录

问题

你需要理解Nginx比较重要的目录和命令。

解决方案

Nginx文件和目录

  • /etc/nginx。 /etc/nginx目录是Nginx服务器默认的配置根目录。在该文件夹中,你可以找到指导Nginx如何运行的一些配置文件。
  • /etc/nginx/nginx.conf。 /etc/nginx/nginx.conf文件是被Nginx服务使用的默认的配置入口点。这个配置文件设置全局设置,例如工作进程,调谐,日志,加载动态模块和引入其他Nginx配置文件。在一个默认的配置中,/etc/nginx/nginx.conf文件包含顶层Http块,他包含目录中的所有的配置文件。
  • /etc/nginx/conf.d。/etc/nginx/conf.d目录包含木人的HTTP服务器配置文件。在该目录中以.conf结尾的文件被包含在来自于/etc/nginx/nginx.conf文件中的顶层http块中。最好的实践就是使用include语句以这样的方式组织你的配置来保持你的配置文件更加简洁。在一些包仓库中,这个文件夹被命名为sites-enabled,配置文件从一个名称为site-avalible的文件夹中链接上来;这种惯例是不被推荐使用的。
  • /var/log/nginx。/var/log/nginx目录是Nginx默认的log位置。在这个文件夹中,你可以看到一个access.log文件和一个error.log文件。access日志文件包含访问Nginx服务器的每一个请求。error日志文件包含错误时间,如果调试模块被使能的话,调试信息也是被包含的。

Nginx命令

  • nginx -h:显示Nginx帮助菜单。
  • nginx -v:显示Nginx版本。
  • nginx -V:显示Nginx版本,构建信息和配置参数,并显示构建进入Nginx二进制中的模块。
  • nginx -t:测试Nginx配置。
  • nginx -T:测试Nginx配置,并且打印有效的配置到屏幕中。当查找相关支持的时候,该命令是有用的。
  • nginx -s signal:-s标志发送一个信号到Nginx主进程中。你可以发送信号例如stop,quit,reload和reopen。stop信号立即停止继续Nginx进程。当他完成处理器上的请求之后,quit信号停止Nginx进程。reload信号重新加载配置。reopen信号指导Nginx重新打开log文件。

讨论

随着对这些关键文件,目录和命令的理解,你将会有一个更好的位置来开始Nginx的工作。随带着这个知识,你可以更改默认的配置文件,并且通过使用nginx -t命令来测试你的改变。如果你的测试是成功的,你也要知道如何指导Nginx来重新加载他的配置,也就是使用nginx -s reload命令。

1.4 服务静态内容

问题

你需要使用Nginx服务于静态内容。

解决方案

遵循下面的Nginx配置例子,重写位于/etc/nginx/conf.d/default.conf的默认的HTTP服务器配置。


server 
	listen 80 default_server;
	server_name www.example.com;

	location / 
		root /usr/share/nginx/html;
		# alias /usr/share/nginx/html;
		index index.html index.htm;
	


讨论

这个配置通过HTTP在80端口上服务于来自目录/usr/share/nginx/html/的静态文件。在这个配置中,第一行定义了一个新的服务器块。它定义了Nginx需要监听的新的上下文。第二行指导Nginx监听80端口,并且default_server参数指导Nginx使用这个服务器作为80端口默认的上下文。server_name直接定义主机名称或哪些请求应该被重定向到这个服务器的名称。如果配置没有定义这个上下文作为默认服务器,Nginx需要重定向请求到这个服务器中,仅仅在HTTP主机头符合直接提供给server_name的值的时候。

location块基于在URL中的路径,定义一个配置。路径或域名后面URL的一部分,被称为URI。Nginx将会最佳匹配被请求到一个location块的URI。举个例子,使用/来匹配所有的请求。当对于给定的上下文服务内容的时候,root直接展示给Nginx去哪里寻找静态文件。当寻找请求的文件的时候,请求的URI被追加到root对应的值中。如果我们已经想location变量提供了一个URI前缀,这个应该被包含在追加的路径中,除非我们使用的是alias目录而不是root。最后,index变量提供给Nginx一个默认的文件,或者是要检查的文件列表,在该事件中,没有其他的路径在URI中被提供了。

1.5 优美的重载

问题

你需要在不丢弃包的情况下,重新加载你的配置。

解决办法

使用Nginx的reload方法,可以在不停止服务器的情况,实现一个优美的配置的重新加载。


nginx -s reload

这个例子使用Nginx二进制来向主进程发送一个信号,重新记载nginx系统。

讨论

在不停止服务器的情况下,重新加载Nginx配置,提供了在不丢包的情况下修改配置的能力。在高正常运行时间,动态环境,你将需要在一些地方修改你的负载均衡配置。当保持在线负载均衡的情况下,Nginx允许你做这样的工作。这个特征提供了无数的可能性,例如在一个活跃的环境中,重新运行配置管理,或构建应用程序或集群感知模块到动态配置中,并且可以重新加载Nginx来满足环境的需要。

以上是关于Nginx基本知识的主要内容,如果未能解决你的问题,请参考以下文章

vscode java:添加源文件夹被忽略

VB.NET 中的文件夹被拒绝访问

yarn publish 失败,因为 dist 文件夹被添加到 gitignore

以 Android SDK 版本 29 为目标后,读取/写入下载文件夹被拒绝

如何防止 Laravel 应用程序文件夹被搜索引擎索引

为什么在 Linux 中的文件夹被称为目录?