搜索
首页运维Nginx浅析nginx的安装与使用(收藏)

之前的文章《深入浅出了解Linux和MacOS终端大小写敏感问题(附代码)》中,给大家了解了Linux和MacOS终端大小写敏感问题。下面本篇文章给大家了解nginx安装和使用,小伙伴们收藏好哦~

浅析nginx的安装与使用(收藏)

Nginx安装使用

For RHEL/CentOS

$ sudo yum install yum-utils -y

#手动写入rpm源
# 在  /etc/yum.repos.d/nginx.repo 写入如下内容

[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key

[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key

$ sudo yum-config-manager --enable nginx-mainline
$ sudo yum install nginx -y

其他平台直接访问http://nginx.org/en/linux_packages.html#stable

nginx.pid失败问题执行sudo nginx -c/usr/local/etc/nginx/nginx.conf sudo nginx-sreload#重启sudo nginx -t#测试配置文件

<strong>nginx</strong>反向代理

server {
    listen       80 default_server;
    listen       [::]:80 default_server;
    server_name  chuchur.com www.chuchur.com;
    #/rest/ 开头的转到7002
    location /rest/ {
        proxy_pass http://127.0.0.1:7002/;
        proxy_redirect  off;
        proxy_set_header        HOST  $host;
        proxy_set_header        X-Real-IP       $remote_addr;
        proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_send_timeout      300;
        proxy_read_timeout      300;
    }

    #其他的转发到7001
    location / {
        proxy_pass http://127.0.0.1:7001;
        proxy_redirect  off;
        proxy_set_header        HOST  $host;
        proxy_set_header        X-Real-IP       $remote_addr;
        proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_send_timeout      300;
        proxy_read_timeout      300;
    }
}

<strong>nginx</strong>负载均衡

#gzip on
upstream node_server{
    server 192.168.0.1:8001 weight=10;
    server 192.168.0.2:8001 weight=20;
}

server{
    listen 80;
    server_name localhost;

    location /{
        proxy_pass http://node_server;
        root html;
        index index.html index.htm;
    }
}

<strong>nignx</strong>缓存

# 1. 配置 http
##cache##
proxy_connect_timeout 500;
#跟后端服务器连接的超时时间_发起握手等候响应超时时间
proxy_read_timeout 600;
#连接成功后_等候后端服务器响应的时间_其实已经进入后端的排队之中等候处理
proxy_send_timeout 500;
#后端服务器数据回传时间_就是在规定时间内后端服务器必须传完所有数据
proxy_buffer_size 128k;
#代理请求缓存区_这个缓存区间会保存用户的头信息以供Nginx进行规则处理_一般只要能保存下头信息即可
proxy_buffers 4 128k;
#同上 告诉Nginx保存单个用的几个Buffer最大用多大空间
proxy_busy_buffers_size 256k;
#如果系统很忙的时候可以申请更大的proxy_buffers 官方推荐*2
proxy_temp_file_write_size 128k;
#proxy缓存临时文件的大小
proxy_temp_path /usr/local/nginx/temp;
#用于指定本地目录来缓冲较大的代理请求
proxy_cache_path /usr/local/nginx/cache levels=1:2 keys_zone=cache_one:200m inactive=1d max_size=30g;
#设置web缓存区名为cache_one,内存缓存空间大小为200M,自动清除超过1天没有被访问过的缓存数据,硬盘缓存空间大小30g
include /etc/nginx/conf.d/*.conf;

# 2.location上添加缓存
#静态数据保存时效
location ~ \.html$ {
      proxy_pass https://www.chuchur.com;
      proxy_redirect off;
      proxy_cache cache_one;
      #此处的cache_one必须于上一步配置的缓存区域名称相同
      proxy_cache_valid 200 304 12h;
      proxy_cache_valid 301 302 1d;
      proxy_cache_valid any 1m;
      #不同的请求设置不同的缓存时效
      proxy_cache_key $uri$is_args$args;
      #生产缓存文件的key,通过4个string变量结合生成
      expires 30d;
      #其余类型的缓存时效为30天
      proxy_set_header X-Forwarded-Proto $scheme;
}


#图片等资源缓存30天
location ~ \.(gif|jpg|jpeg|png|bmp|ico)$ {
    root /var/www/img/;
    expires 30d; #支持 时(h)分(s)秒(m)
}
#视频媒体资源永久缓存
location ~ \.(wma|wmv|asf|mp3|mmf|zip|rar|swf|flv)$ {
    root /var/www/upload/;
    expires max;

    #禁止缓存,每次都从服务器请求
    #add_header Cache-Control no-store;
}

此处需要注意 3 点:

  • 1、只有在proxy_pass的时候,才会生成缓存,下一次请求执行到proxy_pass的时候会判断是否有缓存,如果有则直接读缓存,返回给客户端,不会执行proxy_pass;如果没有,则执行proxy_pass,并按照规则生成缓存文件;可以到nginxcache文件夹下看是否生成了缓存文件。

  • 2、proxy_set_header Host $host这一句可能导致缓存失败,所以不能配置这一句。我在测试的时候遇到了这个问题,不明原理。 

  • 3、proxy_pass使用upstream出差,换成域名或ip则可行。

**清除缓存** 缓存文件是根据proxy_cache_key` 这个指令生成的,所以找到对应的缓存文件,删除即可

location ~ /purge(/.*) {
    #删除指定缓存区域cache_one的特定缓存文件$1$is_args$args
    proxy_cache_purge cache_one $1$is_args$args;
    #运行本机和10.0.217.0网段的机器访问,拒绝其它所有
    allow           127.0.0.1;
    allow           10.0.217.0/24;
    deny          all;
}

删除缓存用到proxy_cache_purge指令。

nignx websocket

location /ws/ {
    proxy_set_header Host $host;
    proxy_http_version 1.1; #必须
    proxy_set_header Upgrade $http_upgrade;#必须
    proxy_set_header Connection "upgrade";#必须
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    ........
}

<strong>nginx</strong>防盗链

location ~* \.(gif|jpg|png|jpeg)$ {
    expires     30d;
    valid_referers none blocke *.chuchur.com www.chuchur.com m.chuchur.com *.baidu.com *.google.com;
    if ($invalid_referer) {
        rewrite ^/ https://chuchur.cn/404.jpg;
    }
}

~*.(jpg|gif|swf)$: 匹配不区分大小写,以.jpg.gif.swf结尾的文件。

valid_referers:设置信任的网站,可以正常使用图片。

none:浏览器中refer为空的情况,就是直接在浏览器访问图片。

blocked:浏览器中refer不为空的情况,但是值被代理或防火墙删除了,这些值不以http://https://开头。

后面的网址或域名:refer包含相关字符串的网址。

if语句:如果链接的来源域名不在valid_referers所列出的列表中,$invalid_referer1,则执行后面的操作,即进行重写或*返回 403页面。

nginx for Vue

server {
    listen       80 default_server;
    listen       [::]:80 default_server;
    server_name  chuchur.com www.chuchur.com;
    location / {
        root ~/www/html;
        index index.html;
        try_files $uri $uri/ /index.html;
    }
}

其他服务器vue部署请参阅的地址:https://router.vuejs.org/zh/guide/essentials/history-mode.html#%E5%90%8E%E7%AB%AF%E9%85%8D%E7%BD%AE%E4%BE%8B%E5%AD%90

https

nginx如何开启httpshttp2(传送门

ningxcss字体的支持,需要修改mime.types加入以下代码

application/octet-stream eot;
application/font-sfnt ttf;
application/font-otf otf;
application/font-woff2 woff2;
application/font-woff woff;

如果是跨域的话,还需要做跨域配置

location ~* .(eot|ttf|woff|svg|otf)$ {
  add_header Access-Control-Allow-Origin *;
}

<strong>location</strong>优先级

  • [=]模式: location = path,此种模式优先级最高(但要全路径匹配)

  • [^~]模式:location ^~ path,此种模式优先级第二高于正则;

  • [~ or ~]模式:location ~ path,正则模式,优先级第三,[~]正则匹配区分大小写,[~]正则匹配不区分大小写;

  • [path]模式: location path,中间什么都不加,直接跟路径表达式; 注意:一次请求只能匹配一个location,一旦匹配成功后,便不再继续匹配其余location;

隐藏nignx版本号

#将Nginx的配置文件中的server_tokens选项值设置为off,如没有该配置项,加上即可。
vim /usr/local/nginx/conf/nginx.conf
...........    #省略内容
    http {
       include       mime.types;
       default_type  application/octet-stream;
       server_tokens     off;    #关闭版本号
............    #省略内容

相关命令

nginx -t #检查查看配置文件路径,其配置是否正确
nginx -s reload # 重启
nginx -s quit #退出
ningx -s stop #停止

常见问题

nginx读取文件permission denied,这种情况直接会导致404 

[error] 17823#17823: *21 open() "/var/www/html/index.html" failed (13: Permission denied), client: 101.228.94.31, server: _

解决办法: 修改/etc/nginx/nginx.conf:

 # user nginx;
user root;  ##root权限或其他
worker_processes auto;
pid /run/nginx.pid;

connect() failed (111: Connection refused) while connecting to upstream

#proxy_set_header Host $host #注释掉这句

如果反向代理服务器不重写该请求头的话,那么后端真实服务器在处理时会认为所有的请求都来在反向代理服务器,如果后端有防攻击策略的话,那么机器就被封掉了。因此,在配置用作反向代理的nginx中一般会增加两条配置,修改http的请求头:

proxy_set_header Host $http_host;
proxy_set_header X-Forward-For $remote_addr;

这里的$http_host和$remote_addr都是nginx的导出变量,可以再配置文件中直接使用。如果Host请求头部没有出现在请求头中,则$http_host值为空,但是$host值>为主域名。因此,一般而言,会用$host代替$http_host变量,从而避免http请求中丢失Host头部的情况下Host不被重写的失误。

内置变量

$arg_name

请求中的的参数名,即“?”后面的arg_name=arg_value形式的arg_name

$args

请求中的参数值

$binary_remote_addr客户端地址的二进制形式,固定长度为 4 个字节

$body_bytes_sent

传输给客户端的字节数,响应头不计算在内;这个变量和Apachemod_log_config模块中的“%B”参数保持兼容

$bytes_sent

传输给客户端的字节数 (1.3.8, 1.2.5)

$connection

TCP连接的序列号 (1.3.8, 1.2.5)

$connection_requests

TCP连接当前的请求数量 (1.3.8, 1.2.5)

$content_length

Content-Length” 请求头字段

$content_type 

Content-Type”请求头字段

$cookie_name

cookie名称

$document_root

当前请求的文档根目录或别名

$document_uri

$uri

$host

优先级如下:HTTP请求行的主机名”HOST”请求头字段>符合请求的服务器名

$hostname

主机名

$http_name

匹配任意请求头字段; 变量名中的后半部分“name”可以替换成任意请求头字段,如在配置文件中需要获取http请求头:“Accept-Language”,那么将“”替换为下划线,大写字母替换为小写,形如:$http_accept_language即可。

$https

如果开启了SSL安全模式,值为“on”,否则为空字符串。

$is_args

如果请求中有参数,值为“?”,否则为空字符串。

$limit_rate

用于设置响应的速度限制,详见limit_rate

$msec

当前的Unix时间戳 (1.3.9, 1.2.6)

$nginx_version nginx版本

$pid

工作进程的PID

$pipe

如果请求来自管道通信,值为“p”,否则为“.” (1.3.12, 1.2.7)

$proxy_protocol_addr

获取代理访问服务器的客户端地址,如果是直接访问,该值为空字符串。(1.5.12)

$query_string

$args

$realpath_root

当前请求的文档根目录或别名的真实路径,会将所有符号连接转换为真实路径。

$remote_addr

客户端地址

$remote_port

客户端端口

$remote_user

用于HTTP基础认证服务的用户名

$request

代表客户端的请求地址

$request_body客户端的请求主体

此变量可在location中使用,将请求主体通过proxy_pass, fastcgi_pass, uwsgi_pass, 和 scgi_pass传递给下一级的代理服务器。

$request_body_file

将客户端请求主体保存在临时文件中。文件处理结束后,此文件需删除。如果需要之一开启此功能,需要设置client_body_in_file_only。如果将次文件传递给后端的代理服务器,需要禁用request body,即设置

proxy_pass_request_body off;
fastcgi_pass_request_body off;
uwsgi_pass_request_body off #or scgi_pass_request_body off

$request_completion

如果请求成功,值为”OK”,如果请求未完成或者请求不是一个范围请求的最后一部分,则为空。

$request_filename 

当前连接请求的文件路径,由rootalias指令与URI请求生成。

$request_length

请求的长度 (包括请求的地址, http请求头和请求主体) (1.3.12, 1.2.7)

$request_method

HTTP请求方法,通常为“GET”或“POST

$request_time

处理客户端请求使用的时间 (1.3.9, 1.2.6); 从读取客户端的第一个字节开始计时。

$request_uri

这个变量等于包含一些客户端请求参数的原始URI,它无法修改,请查看$uri更改或重写URI,不包含主机名,例如:”/cnphp/test.php?arg=freemouse”。

$scheme

请求使用的Web协议,“http”或“https

$sent_http_name

可以设置任意http响应头字段; 变量名中的后半部分“name”可以替换成任意响应头字段,如需要设置响应头Content-length,那么将“”替换为下划线,大写字母替换为小写,形如:$sent_http_content_length 4096即可。

$server_addr服务器端地址,需要注意的是:为了避免访问linux系统内核,应将ip地址提前设置在配置文件中。

$server_name

服务器名,www.cnphp.info

$server_port

服务器端口

$server_protocol

服务器的HTTP版本, 通常为“HTTP/1.0”或“HTTP/1.1

$status

HTTP响应代码 (1.3.2, 1.2.2)

$tcpinfo_rtt, $tcpinfo_rttvar, $tcpinfo_snd_cwnd, $tcpinfo_rcv_space

客户端TCP连接的具体信息

$time_iso8601

服务器时间的ISO 8610格式 (1.3.12, 1.2.7)

$time_local

服务器时间(LOG Format 格式) (1.3.12, 1.2.7)

$uri

请求中的当前 URI(不带请求参数,参数位于$args),可以不同于浏览器传递的$request_uri的值,它可以通过内部重定向,或者使用index指令进行修改,$uri不包含主机名,如”/foo/bar.html”。

常见问题

Active: inactive (dead)

sudo systemctl enable nginx.service
sudo systemctl start nginx.service
sudo systemctl status nginx.service

推荐学习:Nginx视频教程PHP视频教程

以上是浅析nginx的安装与使用(收藏)的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文转载于:禅境花园。如有侵权,请联系admin@php.cn删除
nginx怎么启动nginx怎么启动Apr 14, 2025 pm 01:06 PM

问题:如何启动 Nginx?答案:安装 Nginx启动 Nginx验证 Nginx 是否已启动探索其他启动选项自动启动 Nginx

怎么查看nginx是否启动怎么查看nginx是否启动Apr 14, 2025 pm 01:03 PM

确认 Nginx 是否启动的方法:1. 使用命令行:systemctl status nginx(Linux/Unix)、netstat -ano | findstr 80(Windows);2. 检查端口 80 是否开放;3. 查看系统日志中 Nginx 启动消息;4. 使用第三方工具,如 Nagios、Zabbix、Icinga。

nginx怎么关闭nginx怎么关闭Apr 14, 2025 pm 01:00 PM

要关闭 Nginx 服务,请按以下步骤操作:确定安装类型:Red Hat/CentOS(systemctl status nginx)或 Debian/Ubuntu(service nginx status)停止服务:Red Hat/CentOS(systemctl stop nginx)或 Debian/Ubuntu(service nginx stop)禁用自动启动(可选):Red Hat/CentOS(systemctl disable nginx)或 Debian/Ubuntu(syst

nginx在windows中怎么配置nginx在windows中怎么配置Apr 14, 2025 pm 12:57 PM

如何在 Windows 中配置 Nginx?安装 Nginx 并创建虚拟主机配置。修改主配置文件并包含虚拟主机配置。启动或重新加载 Nginx。测试配置并查看网站。选择性启用 SSL 并配置 SSL 证书。选择性设置防火墙允许 80 和 443 端口流量。

nginx403错误怎么解决nginx403错误怎么解决Apr 14, 2025 pm 12:54 PM

服务器无权访问所请求的资源,导致 nginx 403 错误。解决方法包括:检查文件权限。检查 .htaccess 配置。检查 nginx 配置。配置 SELinux 权限。检查防火墙规则。排除其他原因,如浏览器问题、服务器故障或其他可能的错误。

linux怎么启动nginxlinux怎么启动nginxApr 14, 2025 pm 12:51 PM

在 Linux 中启动 Nginx 的步骤:检查 Nginx 是否已安装。使用 systemctl start nginx 启动 Nginx 服务。使用 systemctl enable nginx 启用在系统启动时自动启动 Nginx。使用 systemctl status nginx 验证启动是否成功。在 Web 浏览器中访问 http://localhost 查看默认欢迎页面。

linux怎么查看nginx是否启动linux怎么查看nginx是否启动Apr 14, 2025 pm 12:48 PM

在 Linux 中,使用以下命令检查 Nginx 是否已启动:systemctl status nginx根据命令输出进行判断:如果显示 "Active: active (running)",则 Nginx 已启动。如果显示 "Active: inactive (dead)",则 Nginx 已停止。

nginx304错误怎么解决nginx304错误怎么解决Apr 14, 2025 pm 12:45 PM

问题的答案:304 Not Modified 错误表示浏览器已缓存客户端请求的最新资源版本。解决方案:1. 清除浏览器缓存;2. 禁用浏览器缓存;3. 配置 Nginx 允许客户端缓存;4. 检查文件权限;5. 检查文件哈希;6. 禁用 CDN 或反向代理缓存;7. 重启 Nginx。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
1 个月前By尊渡假赌尊渡假赌尊渡假赌

热工具

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

将Eclipse与SAP NetWeaver应用服务器集成。

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

Dreamweaver Mac版

Dreamweaver Mac版

视觉化网页开发工具

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中