介绍篇
反向代理
正向代理:A想要认识C,A没有办法直接跟C聊天,所以A通过B把消息传给C。
反向代理:表面上访问百度都是访问www.baidu.com,实际上域名后面有N多具体的ip服务器。
区别:是否对代理有感知,有就是正向代理,没有就是反向代理。
负载均衡
我有一台服务器负载100个请求,我新增一台服务器,通过负载均衡的配置,例如轮训策略,每一台服务器承担50个请求,这种方式就称为负载均衡。
下载篇
http://nginx.org/en/download.html
Linux
第一步:下载安装包
Windows
第一步:下载安装包
第二步:解压zip文件后,文件目录如图所示
第三步:启动nginx
输入命令nginx.exe 或 双击 nginx.exe ,推荐使用命令行启动,否则可能会启动多个nginx
第四步:访问 http://localhost/。如果出现以下页面代表启动成功。
命令篇
nginx -s stop
强制关闭
D:\nginx\nginx-1.22.1>nginx -s stop
D:\nginx\nginx-1.22.1>nginx -s stop
nginx: [error] CreateFile() "D:\nginx\nginx-1.22.1/logs/nginx.pid" failed (2: The system cannot find the file specified)
D:\nginx\nginx-1.22.1>
nginx -s quit
柔和关闭
D:\nginx\nginx-1.22.1>nginx -s quit
D:\nginx\nginx-1.22.1>nginx -s quit
nginx: [error] CreateFile() "D:\nginx\nginx-1.22.1/logs/nginx.pid" failed (2: The system cannot find the file specified)
D:\nginx\nginx-1.22.1>
nginx -v
show version and exit
D:\nginx\nginx-1.22.1>nginx -v
nginx version: nginx/1.22.1
nginx -V
show version and configure options then exit
D:\nginx\nginx-1.22.1>nginx -V
nginx version: nginx/1.22.1
built by cl 16.00.30319.01 for 80x86
built with OpenSSL 1.1.1q 5 Jul 2022
TLS SNI support enabled
configure arguments: --with-cc=cl --builddir=objs.msvc8 --with-debug --prefix= --conf-path=conf/nginx.conf --pid-path=logs/nginx.pid --http-log-path=logs/access.log --error-log-path=logs/error.log --sbin-path=nginx.exe --http-client-body-temp-path=temp/client_body_temp --http-proxy-temp-path=temp/proxy_temp --http-fastcgi-temp-path=temp/fastcgi_temp --http-scgi-temp-path=temp/scgi_temp --http-uwsgi-temp-path=temp/uwsgi_temp --with-cc-opt=-DFD_SETSIZE=1024 --with-pcre=objs.msvc8/lib/pcre2-10.39 --with-zlib=objs.msvc8/lib/zlib-1.2.12 --with-http_v2_module --with-http_realip_module --with-http_addition_module --with-http_sub_module --with-http_dav_module --with-http_stub_status_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_auth_request_module --with-http_random_index_module --with-http_secure_link_module --with-http_slice_module --with-mail --with-stream --with-openssl=objs.msvc8/lib/openssl-1.1.1q --with-openssl-opt='no-asm no-tests -D_WIN32_WINNT=0x0501' --with-http_ssl_module --with-mail_ssl_module --with-stream_ssl_module
nginx -s reload
D:\nginx\nginx-1.22.1>nginx -s reload
D:\nginx\nginx-1.22.1>nginx -s stop
D:\nginx\nginx-1.22.1>nginx -s reload
nginx: [error] CreateFile() "D:\nginx\nginx-1.22.1/logs/nginx.pid" failed (2: The system cannot find the file specified)
D:\nginx\nginx-1.22.1>
nginx -s reopen
D:\nginx\nginx-1.22.1>nginx -s reopen
D:\nginx\nginx-1.22.1>nginx -s stop
D:\nginx\nginx-1.22.1>nginx -s reopen
nginx: [error] CreateFile() "D:\nginx\nginx-1.22.1/logs/nginx.pid" failed (2: The system cannot find the file specified)
D:\nginx\nginx-1.22.1>
nginx -t
test configuration and exit
D:\nginx\nginx-1.22.1>nginx -t
nginx: the configuration file D:\nginx\nginx-1.22.1/conf/nginx.conf syntax is ok
nginx: configuration file D:\nginx\nginx-1.22.1/conf/nginx.conf test is successful
nginx -T
test configuration, dump it and exit
D:\nginx\nginx-1.22.1>nginx -T
nginx: the configuration file D:\nginx\nginx-1.22.1/conf/nginx.conf syntax is ok
nginx: configuration file D:\nginx\nginx-1.22.1/conf/nginx.conf test is successful
# configuration file D:\nginx\nginx-1.22.1/conf/nginx.conf:
nginx -?
D:\nginx\nginx-1.22.1>nginx -?
nginx version: nginx/1.22.1
Usage: nginx [-?hvVtTq] [-s signal] [-p prefix]
[-e filename] [-c filename] [-g directives]
Options:
-?,-h : this help
-v : show version and exit
-V : show version and configure options then exit
-t : test configuration and exit
-T : test configuration, dump it and exit
-q : suppress non-error messages during configuration testing
-s signal : send signal to a master process: stop, quit, reopen, reload
-p prefix : set prefix path (default: NONE)
-e filename : set error log file (default: logs/error.log)
-c filename : set configuration file (default: conf/nginx.conf)
-g directives : set global directives out of configuration file
D:\nginx\nginx-1.22.1>
nginx -h
等同于 nginx -?
nginx -c
指定另一个配置文件
D:\nginx\nginx-1.22.1>nginx -c conf/nginx2.conf
Tips
- 正在运行的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;
worker_processes :工作进程数,默认为1可以根据CPU处理能力适当调大。
events
events {
worker_connections 1024;
}
worker_connections :每一个worker进程支持的最大连接数量,默认1024。
http
http {
include mime.types;
default_type application/octet-stream;
#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 logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
server {
listen 80;
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;
#}
}
# another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
# listen 8000;
# listen somename:8080;
# server_name somename alias another.alias;
# location / {
# root html;
# index index.html index.htm;
# }
#}
# HTTPS server
#
#server {
# listen 443 ssl;
# server_name localhost;
# ssl_certificate cert.pem;
# ssl_certificate_key cert.key;
# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 5m;
# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;
# location / {
# root html;
# index index.html index.htm;
# }
#}
}
- include mime.types; 默认引入这个文件,可以扩展其他文件。
- default_type application/octet-stream; 默认类型
- sendfile on;
- keepalive_timeout 65; 长连接超时时间
- #gzip on; 请求压缩,相当于拿服务器的CPU资源来换请求的大小,从而提升网络传输速度。
server
- listen 80; nginx默认监听端口
- server_name localhost; nginx服务名
- #charset koi8-r;
location
mime.types
文件中的内容
types {
text/html html htm shtml;
text/css css;
text/xml xml;
image/gif gif;
image/jpeg jpeg jpg;
application/javascript js;
application/atom+xml atom;
application/rss+xml rss;
实战篇
反向代理
1 修改nginx.conf文件来实现代理www.baidu.com
location /baidu {
proxy_pass https://www.baidu.com/;
}
当访问 localhost:80/baidu路径的时候,nginx已经帮我们反向代理到www.baidu.com域名下。
2 新增server块来代理9001本地服务
代理前
代理后
3 通过80端口代理本地服务9001配置文件新增内容
游览器效果图
4 通过80端口代理内网ip服务效果图
nginx.conf内容
游览器效果图
负载均衡
upstream srv{
server 127.0.0.1:8091 weight=1;
server 127.0.0.1:8092 weight=1;
}
location / {
root html;
index index.html index.htm;
proxy_pass http://srv;
}