安装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重启几种方法
-
热重启
nginx reload
-
centos
service nginx restart /etc/init.d/nginx stop /etc/init.d/nginx start
-
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{ }
-
=:用于不含正则表达式的url前,要求字符串与url严格匹配,匹配成功就停止向下搜索并处理请求
-
~:用于表示url包含正则表达式,并且区分大小写。
-
~*:用于表示url包含正则表达式,并且不区分大瞎写
-
^~:用于不含正则表达式的url前,要求ngin服务器找到表示url和字符串匹配度最高的location后,立即使用此location处理请求,而不再匹配
-
如果有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.net 和 http://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