本文是对自己学习的一个总结
正向代理和反向代理
我们都是知道nginx是充当着一个中间人的角色。使用nginx时我们的访问并不是直接到达想要访问的服务器的,总是先到达nginx,然后在到达服务器。
其中根据我们访问方式的不同,可以将代理分为正向代理和反向代理。
- 正向代理
正向代理是指,我们想访问一个网站A而访问不到,但是服务器B可以访问A,并且我们也可以访问B,那么我们就可以先访问B然后由B来访问A。A将数据返回给B,B再将数据返回给我们。
这就是正向代理,我们用的VPN就是正向代理。在这个过程中,尽管我们是通过B访问A的,但是输入网址的时候我们并不会输入B的网址,而是直接输入A的网址。整个过程中我们感觉不到B在其中起作用,感觉就像是直接访问了我们想要的服务器。
- 反向代理
反向代理和正向代理相反,正向代理是隐藏代理细节,而反向代理是隐藏访问的真正服务器。
比如一个网站的服务器有多个,是分布式的。我们访问这个网站的时候,不用在意最终是哪个服务器给我们提供服务,我们只需要输入固定的网址,也就是代理的网址。代理会将我们的请求分配给某一个服务器(当然这个过程我们不知道,整个过程的感觉就是所有的服务都是代理一个服务器提供的)。
Nginx的配置文件
我使用的是Mac,在Mac中,nginx的默认安装位置是 /usr/local/etc/nginx 。该路径下有一个nginx.conf的文件,这个文件就是nginx的配置文件。下面就讲解一下配置文件的各种细节。
nginx的默认的配置文件很多东西都被注释掉了,这一次的讲解是从上到下讲解各属性的意义,并且会自动将部分注解删掉,又加上一些自己的注释。
-
基本配置
user nobody;
worker_processes 1;
error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
pid logs/nginx.pid;
1、user nobody;
这一行表示以什么身份的用户来运行nginx。nobody是linux的一种用户。linux上的文件都是有权限的,有些文件的访问和修改需要密码。nobody这类用户就没法访问一切需要密码的文件,它是一种无密码的用户。
如果想要以高权限的用户来运行nginx,可以将nobody改成root或者www。
2、worker_processes 1;
这一行表示nginx拥有的进程数,这些进程就是用来处理请求的,当然是多一点比较好,不过也不是越多越好。
一般来说进程数和CPU相关,一般是CPU的一倍或两倍。如果只有一个CPU,那么worker_processes = 1 或worker_processes = 2。如果有八个CPU,那么worker_processes = 8 或worker_processes = 16。
3、error_log logs/error.log;
配置全局错误日志及类型,[debug | info | notice | warn | error | crit],默认是error。
这个可以写多行,将运行时发生的各类信息存储到不同的日志文件中。error_log logs/error.log 。 这一行忽略了日志文件的类型,那它的类型就默认是error。当nginx发生error时,信息就会被记录在 logs/error.log 之中(路劲就是nginx所在路径,这里我没测试)。当然路径也是可以自定义的
4、pid logs/nginx.pid;
这个pid记录着进程的编号。
-
配置工作模式和连接数
events {
worker_connections 1024;
}
worker_connections表示每个进程可处理的连接数的上限。nginx可以同时处理的连接数就是worker_connections * worker_processes。
-
配置http服务器
-
配置虚拟主机
server {
listen 8080; //配置服务器端口
server_name localhost; //配置服务器的域名
#charset koi8-r; ///字符集,默认是俄罗斯的字符集
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
注释部分先不用管,只管location这个属性。
location / {
root html;
index index.html index.htm;
}
location配置的是服务器的位置。 / 这个符号表示分隔,它分隔的是域名和文件。比如我们令server_name = luckincoffee.com,listen = 80。那么域名就应该是luckincoffee.com:80。那么后面就应该是访问资源的路径,那么这个路径和域名就应该由 / 来分隔开。
root表示资源文件的根目录,Index表示资源文件在这个根目录下的具体路径。
其中默认root = html,根目录默认nginx文件底下的html文件夹,在mac中是/usr/local/Cellar/nginx/1.17.3_1/html文件夹。
index是文件相对于跟文件夹的路径,这个路径可以是多个,在默认中是html文件夹下的index.html或index.htm文件。
在上面的配置中有个文件的路径是/usr/local/var/www/index.html,那么我们输入localhost:80/index.html就能访问到这个文件。