在linux上安装nginx
前言
linux系统基本上分两大类:
- RedHat系列:Redhat、Centos、Fedora等
- 常见的安装包格式 rpm 包,安装rpm包的命令是 “rpm -参数”
- 包管理工具 yum
- 支持tar包
- Debian系列:Debian、Ubuntu等
- 常见的安装包格式 deb 包,安装deb包的命令是 “dpkg -参数”
- 包管理工具 apt-get
- 支持tar包
这里以Ubuntu为例,即使用apt-get
安装
使用 apt-get
来安装nginx
apt-get install nginx # 安装nginx
nginx -v # 查看nginx版本
dpkg -L nginx #查看 Nginx 被安装到了什么地方,有哪些相关目录
/etc/nginx/conf.d/
文件夹,是我们进行子配置的配置项存放处,/etc/nginx/nginx.conf
主配置文件会默认把这个文件夹中所有子配置项都引入;
/usr/share/nginx/html/
文件夹,通常静态文件都放在这个文件夹,也可以根据自己的习惯放其他地方;
使用yum安装nginx
rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm #默认情况Centos7中无Nginx的源,最近发现Nginx官网提供了Centos的源地址。因此可以执行该命令添加源
yum install -y nginx
启动nginx
使用命令 systemctl start nginx
设置启动nginx。但是如果在wsl上,则会报错,因为wsl是不支持systemctl
的(现在可以使用了 但是得配置一下,具体配置方法:
也可以使用
sudo service nginx start
来启动nginx
启动之后访问你的 IP,这时候就可以看到 Nginx 的欢迎页面了~
公网ip可以通过
curl ifconfig.me
拿到本地IP地址可以通过
hostname -i
拿到内网IP地址可以通过
ip addr | grep inet
拿到记得公网防火墙得放行一下相关端口,我这边是直接用的本地IP访问
nginx相关命令
通过nginx -h
可以查看nginx相关的命令
nginx -s reload # 向主进程发送信号,重新加载配置文件,热重启
nginx -s reopen # 重启 Nginx
nginx -s stop # 快速关闭
nginx -s quit # 等待工作进程处理完成后关闭
nginx -T # 查看当前 Nginx 最终的配置
nginx -t -c <配置路径> # 检查配置是否有问题,如果已经在配置目录,则不需要-c
systemctl
是 Linux 系统应用管理工具 systemd
的主命令,用于管理系统,我们也可以用它来对 Nginx 进行管理,相关命令如下:
systemctl start nginx # 启动 Nginx
systemctl stop nginx # 停止 Nginx
systemctl restart nginx # 重启 Nginx
systemctl reload nginx # 重新加载 Nginx,用于修改配置后
systemctl enable nginx # 设置开机启动 Nginx
systemctl disable nginx # 关闭开机启动 Nginx
systemctl status nginx # 查看 Nginx 运行状态
配置
user nginx; # 运行用户,默认即是nginx,可以不进行设置
worker_processes 1; # Nginx 进程数,一般设置为和 CPU 核数一样
error_log /var/log/nginx/error.log warn; # Nginx 的错误日志存放目录
pid /var/run/nginx.pid; # Nginx 服务启动时的 pid 存放位置
events {
use epoll; # 使用epoll的I/O模型(如果你不知道Nginx该使用哪种轮询方法,会自动选择一个最适合你操作系统的)
worker_connections 1024; # 每个进程允许最大并发数
}
http { # 配置使用最频繁的部分,代理、缓存、日志定义等绝大多数功能和第三方模块的配置都在这里设置
# 设置日志模式
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main; # Nginx访问日志存放位置
sendfile on; # 开启高效传输模式
tcp_nopush on; # 减少网络报文段的数量
tcp_nodelay on;
keepalive_timeout 65; # 保持连接的时间,也叫超时时间,单位秒
types_hash_max_size 2048;
include /etc/nginx/mime.types; # 文件扩展名与类型映射表
default_type application/octet-stream; # 默认文件类型
include /etc/nginx/conf.d/ *.conf; # 加载子配置项
server {
listen 80; # 配置监听的端口
server_name localhost; # 配置的域名
location / {
root /usr/share/nginx/html; # 网站根目录
index index.html index.htm; # 默认首页文件
deny 172.168.22.11; # 禁止访问的ip地址,可以为all
allow 172.168.33.44;# 允许访问的ip地址,可以为all
}
error_page 500 502 503 504 /50x.html; # 默认50x对应的访问页面
error_page 400 404 error.html; # 同上
}
}
全局变量
Nginx 有一些常用的全局变量,你可以在配置的任何位置使用它们,如下表:
| 全局变量名 | 功能 |
| :----------------- | :----------------------------------------------------------- |
| $host
| 请求信息中的 Host
,如果请求中没有 Host
行,则等于设置的服务器名,不包含端口 |
| $request_method
| 客户端请求类型,如 GET
、POST
|
| $remote_addr
| 客户端的 IP
地址 |
| $args
| 请求中的参数 |
| $arg_PARAMETER
| GET
请求中变量名 PARAMETER 参数的值,例如:$http_user_agent
(Uaer-Agent 值), $http_referer
... |
| $content_length
| 请求头中的 Content-length
字段 |
| $http_user_agent
| 客户端agent信息 |
| $http_cookie
| 客户端cookie信息 |
| $remote_port
| 客户端的端口 |
| $http_user_agent
| 客户端agent信息 |
| $server_protocol
| 请求使用的协议,如 HTTP/1.0
、HTTP/1.1
|
| $server_addr
| 服务器地址 |
| $server_name
| 服务器名称 |
| $server_port
| 服务器的端口号 |
| $scheme
| HTTP 方法(如http,https) |
日志
对于存储在access_log
的日志,日志的相关信息对应着如下字段
remote_addr - remote_user [time_local] "request" status body_bytes_sent "http_referer" "http_user_agent" "http_host"
remote_addr
:请求的客户端 IP 地址。remote_user
:请求的客户端用户名,如果没有进行身份验证,则为 "-"。time_local
:请求的本地时间,使用 Common Log 格式。request
:请求的方法、URI 和 HTTP 协议版本。status
:服务器返回的 HTTP 状态码。body_bytes_sent
:发送给客户端的响应体的字节数。http_referer
:请求来源,即请求头中的 Referer 字段。http_user_agent
:客户端浏览器的 User-Agent 字符串。http_host
:请求的主机名,即请求头中的 Host 字段。