nginx详解

安装nginx

Ubuntu/Debian系统: sudo apt-get update && apt-get install nginx

CentOS/RHEL系统: sudo yum update sudo yum install nginx

安装完成后,您可以使用以下命令启动Nginx: sudo systemctl start nginx

要检查Nginx是否正在运行,可以运行以下命令: sudo systemctl status nginx

如果您想在系统启动时自动启动Nginx,可以使用以下命令: sudo systemctl enable nginx

遇到的错误

nginx: [emerg] listen() to [::]:80, backlog 511 failed (98: Address already in use)

通过netstat -tlnp发现:80和443端口被caddy 进程占用,而caddy 是安装v2ray 时默认安装的。 执行systemctl status caddy 停止caddy后 sudo service nginx start = # Welcome to nginx!

nginx重启几种方法

  1. 热重启 nginx reload

  2. centos

service nginx restart  
/etc/init.d/nginx stop  
/etc/init.d/nginx start
  1. Ubuntu

sudo service nginx start  
sudo service nginx stop

什么是正向代理和反向代理,他们的区别是什么?

推荐文章:漫画:如何给女朋友解释什么是反向代理?

  • 正向代理为客户端服务。

  • 反向代理为服务器端服务。

虽然正向代理服务器和反向代理服务器所处的位置都是客户端和真实服务器之间,所做的事情也都是把客户端的请求转发给服务器,再把服务器的响应转发给客户端,但是二者之间还是有一定的差异的。

1、正向代理其实是客户端的代理,帮助客户端访问其无法访问的服务器资源。反向代理则是服务器的代理,帮助服务器做负载均衡,安全防护等。

2、正向代理一般是客户端架设的,比如在自己的机器上安装一个代理软件。而反向代理一般是服务器架设的,比如在自己的机器集群中部署一个反向代理服务器。

3、正向代理中,服务器不知道真正的客户端到底是谁,以为访问自己的就是真实的客户端。而在反向代理中,客户端不知道真正的服务器是谁,以为自己访问的就是真实的服务器。

4、正向代理和反向代理的作用和目的不同。正向代理主要是用来解决访问限制问题。而反向代理则是提供负载均衡、安全防护等作用。二者均能提高访问速度。

nginx配置示例

正向代理示例:

server {
  listen 8000;
  server_name localhost;
  
  location /proxy_zhihu/ {
      proxy_pass http://zhihu.com/;
  }
}

反向代理示例:

upstream app{
  server 192.168.10.1:8000;
  server 192.168.10.2:8000;
}
​
​
server {
  listen 8000;
  server_name localhost;
  
  localtion / {
    proxy_pass htpp://app;
  }
}

nginx 配置文件分三部分组成

全局块

从配置文件开始到events块之间,主要是设置一些影响nginx服务器整体运行的配置指令 并发处理服务的配置,值越大,可以支持的并发处理量越多,但是会受到硬件、软件等设备的制约

events块

影响nginx服务器与用户的网络连接,常用的设置包括是否开启对多workprocess下的网络连接进行序列化,是否允许同时接收多个网络连接等等 worker_connections支持的最大连接数

http块

诸如反向代理和负载均衡都在此配置 location指令说明 - 该语法用来匹配url,语法如下

location[ = | ~ | ~* | ^~] url{
​
}
  1. =:用于不含正则表达式的url前,要求字符串与url严格匹配,匹配成功就停止向下搜索并处理请求

  2. ~:用于表示url包含正则表达式,并且区分大小写。

  3. ~*:用于表示url包含正则表达式,并且不区分大瞎写

  4. ^~:用于不含正则表达式的url前,要求ngin服务器找到表示url和字符串匹配度最高的location后,立即使用此location处理请求,而不再匹配

  5. 如果有url包含正则表达式,不需要有~开头标识

nginx 默认配置文件简介

## 首尾配置暂时忽略
server {  
        # 当nginx接到请求后,会匹配其配置中的service模块
        # 匹配方法就是将请求携带的host和port去跟配置中的server_name和listen相匹配
        listen       8080;        
        server_name  localhost; # 定义当前虚拟主机(站点)匹配请求的主机名
​
        location / {
            root   html; # Nginx默认值
            # 设定Nginx服务器返回的文档名
            index  index.html index.htm; # 先找根目录下的index.html,如果没有再找index.htm
        }
}
## 首尾配置暂时忽略

server{ } 其实是包含在 http{ } 内部的。每一个 server{ } 是一个虚拟主机(站点)。

nginx 的四大应用

动静分离、反向代理、负载均衡、正向代理

# 负载均衡:设置domain
upstream domain {
        server localhost:8000;
        server localhost:8001;
}
server {  
        listen       8080;        
        server_name  localhost;
​
        location / {
            root   html; # Nginx默认值
            index  index.html index.htm;
        }
​
        # 静态化配置,所有静态请求都转发给 nginx 处理,存放目录为 my-project
        location ~ .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|js|css)$ {
            root /usr/local/var/www/my-project; # 静态请求所代理到的根目录
        }
​
        # 动态请求匹配到path为'node'的就转发到8002端口处理
        location /node/ {  
            proxy_pass http://localhost:8002; # 充当服务代理
            # 也就是反向代理配置,请求会被转发到8002端口
        }
        location / {
            # root   html; # Nginx默认值
            # index  index.html index.htm;
​
            proxy_pass http://domain; # 负载均衡配置,请求会被平均分配到8000和8001端口
            proxy_set_header Host $host:$server_port;
        }
}

nginx 虚拟机默认配置

默认在 /etc/nginx/nginx.conf 配置文件中会有如下配置:

http {
    ......
    ##
    # Virtual Host Configs
    ##
​
    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}

这表明默认情况下 nginx 会自动包含 /etc/nginx/conf.d/*.conf/etc/nginx/sites-enabled/*

nginx 启用站点和可用站点

默认情况下,在 /etc/nginx/sites-enabled 下有一个默认站点,这个站点也就是 nginx 安装之后的默认站点:

$ cd /etc/nginx/sites-enabled
$ ls -l
total 0
lrwxrwxrwx 1 root root 34 Oct  6 02:19 default -> /etc/nginx/sites-available/default

打开 /etc/nginx/sites-available/default 可以看到如下内容:

server {
        listen 80 default_server;
        listen [::]:80 default_server;
​
        root /var/www/html;
        index index.html index.htm index.nginx-debian.html;
​
        server_name _;
        location / {
                try_files $uri $uri/ =404;
        }

最好是在 /etc/nginx/sites-available/ 下建立站点的配置文件,这些站点就是所谓的"可用站点"。然后在 link 到 /etc/nginx/sites-enabled 下开启站点,这些开启的站点就是所谓"启用站点"。

通过建立链接来控制可用站点的启用。

实战

创建虚拟主机 http://basiccloud.net

目标: http://basiccloud.nethttp://www.basiccloud.net 应该都指向同一个虚拟主机。

/etc/nginx/sites-available/ 下新建 basiccloud.net 文件,内容如下:

server {
       listen 80;
​
       server_name basiccloud.net www.basiccloud.net;
​
       root /var/www/basiccloud.net;
       index index.html;
}

然后建立 /var/www/basiccloud.net 目录,准备好站点的html文件。

http://basiccloud.net 站点文件链接到 /etc/nginx/sites-enabled/ 目录:

sudo ln -s /etc/nginx/sites-available/basiccloud.net /etc/nginx/sites-enabled/basiccloud.net

配置完成之后,在重新转载前,先验证一下:

$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

验证通过,再重新装载:

sudo nginx -s reload

创建虚拟主机 http://dolphin.basiccloud.net

目标: http://dolphin.basiccloud.net 应该指向另外一个虚拟主机。

/etc/nginx/sites-available/ 下新建 dolphin.basiccloud.net 文件,内容如下:

server {
       listen 80;
​
       server_name dolphin.basiccloud.net;
​
       root /var/www/dolphin.basiccloud.net;
       index index.html;
}

然后建立 /var/www/dolphin.basiccloud.net 目录,准备好站点的html文件。

http://dolphin.basiccloud.net 站点文件链接到 /etc/nginx/sites-enabled/ 目录:

sudo ln -s /etc/nginx/sites-available/dolphin.basiccloud.net /etc/nginx/sites-enabled/dolphin.ba
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值