资料 Nginx 极简教程 视频教程

简介

什么是 Nginx?
Nginx (engine x) 是一款轻量级的 Web 服务器 、反向代理服务器及电子邮件(IMAP/POP3)代理服务器。
Nginx - 图1

什么是反向代理?
反向代理(Reverse Proxy)方式是指以代理服务器来接受 internet 上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给 internet 上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。
Nginx - 图2

安装

详细安装方法请参考:Nginx 运维

Linux 安装

rpm 包方式(推荐)
(1)进入下载页面,选择合适版本下载。

  1. $ wget http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

(2)安装 nginx rpm 包
nginx rpm 包实际上安装的是 nginx 的 yum 源。

  1. $ rpm -ivh nginx-*.rpm

(3)正式安装 rpm 包

  1. $ yum install nginx
  2. nginx -v //可以看到具体的版本信息

(4)关闭防火墙

  1. $ firewall-cmd --zone=public --add-port=80/tcp --permanent
  2. $ firewall-cmd --reload

(5)启动

  1. $ nginx

启动完输入 地址:80 即可查看
image.png

yum安装

如何卸载?

nginx 默认目录

  1. whereis nginx

即可看到类似于如下的内容:
nginx: /usr/sbin/nginx /usr/lib64/nginx /etc/nginx /usr/share/nginx

以下是Nginx的默认路径:
(1) Nginx配置路径:/etc/nginx/
(2) PID目录:/var/run/nginx.pid
(3) 错误日志:/var/log/nginx/error.log
(4) 访问日志:/var/log/nginx/access.log
(5) 默认站点目录:/usr/share/nginx/html

默认配置文件路径

  1. /etc/nginx/nginx.conf

这个文件里可能会有引用,比如

  1. include /etc/nginx/conf.d/*.conf;

那么实际上你的项目配置文件就是在/etc/nginx/conf.d/这个文件夹下的所有.conf文件;
一般一个项目(域名)配一个文件,比如你的域名是www.baidu.com,那么你的配置文件就可以叫

  1. /etc/nginx/conf.d/www.baidu.com.conf

开机启动

Centos7 以上是用 Systemd 进行系统初始化的,Systemd 是 Linux 系统中最新的初始化系统(init),它主要的设计目标是克服 sysvinit 固有的缺点,提高系统的启动速度。Systemd 服务文件以 .service 结尾。

rpm 包方式

如果是通过 rpm 包安装的,会自动创建 nginx.service 文件。
直接用命令:

  1. $ systemctl enable nginx.service
  2. $ systemctl enable nginx //(上面的不可以使用下面的)

拓展:利用 yum 命令和 rpm 命令升级Nginx或者安装最新版Nginx

  • 下载 Nginx 官网的指定 rpm 包,使用 rpm 命令升级

Nginx官方的 rpm包地址:http://nginx.org/packages/rhel/7/x86_64/RPMS/

  1. #先下载nginx的rpm包
  2. [root@test soft]# wget http://nginx.org/packages/rhel/7/x86_64/RPMS/nginx-1.12.0-1.el7.ngx.x86_64.rpm
  3. # 再执行 rpm -Uvh nginx-1.12***
  4. [root@test soft]# rpm -Uvh nginx-1.12.0-1.el7.ngx.x86_64.rpm
  5. warning: nginx-1.12.0-1.el7.ngx.x86_64.rpm: Header V4 RSA/SHA1 Signature, key ID 7bd9bf62: NOKEY
  6. Preparing... ################################# [100%]
  7. Updating / installing...
  8. 1:nginx-1:1.12.0-1.el7.ngx ################################# [ 50%]
  9. Cleaning up / removing...
  10. 2:nginx-1:1.6.3-8.el7 ################################# [100%]# 升级后
  11. [root@test soft]# rpm -qa|grep nginxnginx-1.12.0-1.el7.ngx.x86_64

防火墙设置

当添加配置后,比如8081端口,在服务器本地curl 127.0.0.1:8001是可以运行的,但是在windows下浏览器中运行服务器公网ip:8001时不可以访问的,如果系统开启了防火墙这时需要添加防火墙对外开放端口。(下方有未开启防火墙的配置)

设置防火墙对外开放端口

  1. firewall-cmd --list-all 查看开放的端口号
  2. sudo firewall-cmd --add-port=8000/tcp --permanent 开放8000端口
  3. firewall-cmd --reload 重启防火墙
  4. systemctl start firewalld # 开启防火墙
  5. systemctl stop firewalld # 关闭防火墙
  6. systemctl status firewalld # 查看防火墙开启状态,显示running则是正在运行
  7. firewall-cmd --reload # 重启防火墙,永久打开端口需要reload一下
  8. # 添加开启端口,--permanent表示永久打开,不加是临时打开重启之后失效
  9. firewall-cmd --permanent --zone=public --add-port=8888/tcp
  10. # 查看防火墙,添加的端口也可以看到
  11. firewall-cmd --list-all

解决FirewallD is not running问题

1.查看firewalld状态,如果是dead状态,即防火墙未开启。

  1. systemctl status firewalld

2.开启防火墙

  1. systemctl start firewalld

3.确认firewalld状态

  1. systemctl status firewalld

4.开放默认端口号 3306,出现success表示成功

  1. firewall-cmd --permanent --zone=public --add-port=3306/tcp

关闭防火墙

  1. systemctl stop firewalld

入门

常用的命令

  1. nginx -s stop 快速关闭Nginx,可能不保存相关信息,并迅速终止web服务。
  2. nginx -s quit 平稳关闭Nginx,保存相关信息,有安排的结束web服务。
  3. nginx -s reload 因改变了Nginx相关配置,需要重新加载配置而重载。
  4. nginx -s reopen 重新打开日志文件。
  5. nginx -c filename Nginx 指定一个配置文件,来代替缺省的。
  6. nginx -t 不运行,仅仅测试配置文件。nginx 将检查配置文件的语法的正确性,并尝试打开配置文件中所引用到的文件。
  7. nginx -v 显示 nginx 的版本。
  8. nginx -V 显示 nginx 的版本,编译器版本和配置参数。
  1. nginx -t nginx 将检查配置文件的语法的正确性,并尝试打开配置文件中所引用的文件

相关文件夹

查看 nginx 被安装到了什么地方,有哪些相关目录,其中位于 /etc 目录下的主要是配置文件

  1. rpm -ql nginx

Nginx - 图4
主要关注的文件夹有两个:

  1. /etc/nginx/conf.d/ 文件夹,是我们进行子配置的配置项存放处,/etc/nginx/nginx.conf 主配置文件会默认把这个文件夹中所有子配置项都引入;
  2. /usr/share/nginx/html/ 文件夹,通常静态文件都放在这个文件夹,也可以根据你自己的习惯放其他地方;

配置文件

nginx的配置放在nginx.conf文件中,一般我们可以使用以下命令查看服务器中存在的nginx.conf文件。

  1. locate nginx.conf
  2. /usr/local/etc/nginx/nginx.conf
  3. /usr/local/etc/nginx/nginx.conf.default

如果服务器中存在多个nginx.conf文件,我们并不知道实际上调用的是哪个配置文件,因此我们必须找到实际调用的配置文件才能进行修改。

关于配置文件的路径不同
应该是安装方式不同导致的,使用 wget 安装的配置文件在 /usr/local/nginx/conf,使用 yum 安装的配置文件在 /etc/nginx下。

nginx.conf 结构图可以这样概括:

  1. main # 全局配置,对全局生效
  2. ├── events # 配置影响 Nginx 服务器或与用户的网络连接
  3. ├── http # 配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置
  4. ├── upstream # 配置后端服务器具体地址,负载均衡配置不可或缺的部分
  5. ├── server # 配置虚拟主机的相关参数,一个 http 块中可以有多个 server
  6. ├── server
  7. ├── location # server 块可以包含多个 location 块,location 指令用于匹配 uri
  8. ├── location
  9. └── ...
  10. └── ...
  11. └── ...

一个 Nginx 配置文件的结构就像 nginx.conf 显示的那样,配置文件的语法规则:

  1. 配置文件由指令与指令块构成;
  2. 每条指令以 ; 分号结尾,指令与参数间以空格符号分隔;
  3. 指令块以 {} 大括号将多条指令组织在一起;
  4. include 语句允许组合多个配置文件以提升可维护性;
  5. 使用 # 符号添加注释,提高可读性;
  6. 使用 $ 符号使用变量;
  7. 部分指令的参数支持正则表达式;

典例配置

  1. user nginx; # 运行用户,默认即是nginx,可以不进行设置
  2. worker_processes 1; # Nginx 进程数,一般设置为和 CPU 核数一样
  3. error_log /var/log/nginx/error.log warn; # Nginx 的错误日志存放目录
  4. pid /var/run/nginx.pid; # Nginx 服务启动时的 pid 存放位置
  5. events {
  6. use epoll; # 使用epollI/O模型(如果你不知道Nginx该使用哪种轮询方法,会自动选择一个最适合你操作系统的)
  7. worker_connections 1024; # 每个进程允许最大并发数
  8. }
  9. http { # 配置使用最频繁的部分,代理、缓存、日志定义等绝大多数功能和第三方模块的配置都在这里设置
  10. # 设置日志模式
  11. log_format main '$remote_addr - $remote_user [$time_local] "$request" '
  12. '$status $body_bytes_sent "$http_referer" '
  13. '"$http_user_agent" "$http_x_forwarded_for"';
  14. access_log /var/log/nginx/access.log main; # Nginx访问日志存放位置
  15. sendfile on; # 开启高效传输模式
  16. tcp_nopush on; # 减少网络报文段的数量
  17. tcp_nodelay on;
  18. keepalive_timeout 65; # 保持连接的时间,也叫超时时间,单位秒
  19. types_hash_max_size 2048;
  20. include /etc/nginx/mime.types; # 文件扩展名与类型映射表
  21. default_type application/octet-stream; # 默认文件类型
  22. include /etc/nginx/conf.d/*.conf; # 加载子配置项
  23. server {
  24. listen 80; # 配置监听的端口
  25. server_name localhost; # 配置的域名
  26. location / {
  27. root /usr/share/nginx/html; # 网站根目录
  28. index index.html index.htm; # 默认首页文件
  29. deny 172.168.22.11; # 禁止访问的ip地址,可以为all
  30. allow 172.168.33.44; # 允许访问的ip地址,可以为all
  31. }
  32. error_page 500 502 503 504 /50x.html; # 默认50x对应的访问页面
  33. error_page 400 404 error.html; # 同上
  34. }
  35. }

资料

请问nginx的配置文件nginx.conf在哪里?
https://segmentfault.com/q/1010000021970819

编译方式安装
https://cloud.tencent.com/developer/article/1654844
注意需要关闭防火墙