文章目录
1. nginx安装
2. docker 安装nginx
1. 下载nginx镜像
docker pull nginx
2. 常见nginx根目录及配置文件
mkdir /mnt/nginx/html
mkdir /mnt/nginx/config
vim /mnt/nginx/config/nginx.conf
3. 运行镜像创建容器
docker run --name mynginx -v mnt/nginx/config/nginx.conf:/etc/nginx/nginx.conf -v /mnt/nginx/html:/usr/share/nginx/html -p 80:80 -p 8080:8080 -d nginx
nginx.conf 配置
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/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 /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
}
3 反向代理(负载)
-
通常的代理服务器,只用于代理内部网络对Internet的连接请求,客户机必须指定代理服务器,并将本来要直接发送到Web服务器上的http请求发送到代理服务器中。由于外部网络上的主机并不会配置并使用这个代理服务器,普通代理服务器也被设计为在Internet上搜寻多个不确定的服务器,而不是针对Internet上多个客户机的请求访问某一个固定的服务器,因此普通的Web代理服务器不支持外部对内部网络的访问请求。当一个代理服务器能够代理外部网络上的主机,访问内部网络时,这种代理服务的方式称为反向代理服务。
-
通俗来讲就是 外部网络访问代理服务器(通常是唯一外网服务器),代理服务器在访问内网服务器称为反向代理服务。由于内网服务器不能被外部网络直接直接访问,所以需要反向代理服务。
-
nginx负载. 当nginx实现反向代理的同时,我们也可以对web服务做负载均衡来分摊web服务的压力。web服务在不同的内网中(外网中)部署多台,称之为集群。当外部网络访问代理服务器时,由代理服务器去随机或根据权重去请求内网服务器(或外网服务器)。可以实现负载
nginx反向代理配置(负载配置)
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
#负责压缩数据流
gzip on;
gzip_min_length 1000;
gzip_types text/plain text/css application/x-javascript;
#设定负载均衡的服务器列表
#weigth参数表示权值,权值越高被分配到的几率越大
upstream test{
server 192.168.0.194:8080 weight=1;
server 192.168.0.195:8080 weight=3;
server 192.168.0.195:8085 weight=2;
}
server {
#侦听的80端口
listen 80;
# 服务名称 可配置域名只有配置的域名才可以访问
server_name localhost,www.baidu.com;
#设定查看Nginx状态的地址
location /nginxstatus{
stub_status on;
access_log on;
auth_basic "nginxstatus";
auth_basic_user_file htpasswd;
}
#匹配以jsp结尾的,tomcat的网页文件是以jsp结尾
location / {
root /usr/share/nginx/html;
index index.html index.htm;
# proxy_pass http://192.168.0.194:8080; 直接转发也可以
proxy_pass http://test; #在这里设置一个代理,和upstream的名字一样
#以下是一些反向代理的配置可删除
proxy_redirect off;
#后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m; #允许客户端请求的最大单文件字节数
client_body_buffer_size 128k; #缓冲区代理缓冲用户端请求的最大字节数
proxy_connect_timeout 300; #nginx跟后端服务器连接超时时间(代理连接超时)
proxy_send_timeout 300; #后端服务器数据回传时间(代理发送超时)
proxy_read_timeout 300; #连接成功后,后端服务器响应时间(代理接收超时)
proxy_buffer_size 4k; #设置代理服务器(nginx)保存用户头信息的缓冲区大小
proxy_buffers 4 32k; #proxy_buffers缓冲区,网页平均在32k以下的话,这样设置
proxy_busy_buffers_size 64k; #高负荷下缓冲大小(proxy_buffers*2)
proxy_temp_file_write_size 64k; #设定缓存文件夹大小,大于这个值,将从upstream服务器传
}
4. 正向代理(上网代理)
-
上面有说通常的代理服务器,只用于代理内部网络对Internet的连接请求,客户机必须指定代理服务器,并将本来要直接发送到Web服务器上的http请求发送到代理服务器中。称之为正向代理。
-
为什么使用代理服务器?
- 网络代理,是一种特殊的网络服务,允许一个网络终端(一般为客户端)通过这个服务与另一个网络终端(一般为服务器)进行非直接的连接。一些网关、路由器等网络设备具备网络代理功能。一般认为代理服务有利于保障网络终端的隐私或安全,防止攻击
- 当内部网络无法上网时, 可以通过代理服务器上网
nginx 代理服务器配置
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
use epoll;
worker_connections 1024;
}
http {
resolver 8.8.8.8;
server {
listen 8088;
location / {
proxy_pass http://$http_host$request_uri;
}
}
}
与反向代理配置区别。
- 正向代理特点 增加dns解析 resolver
- server 没有server_name
- proxy_pass指令
内网服务器上网代理配置
vim /etc/profile 追加
#代理服务器
http_proxy=http://root@192.168.0.194:8088/
# http_proxy=http://用户名:密码@ip:端口/
# 如果用私钥登录 http_proxy=http://用户名@ip:端口/
https_proxy=http://root@192.168.0.194:8088/
export http_proxy https_proxy
- http_proxy http代理
- https_proxy https代理
- no_proxy 不使用代理的域名或ip (no_proxy=localhost,127.0.0.1,*.baidu.com)
5. nginx https证书配置
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
use epoll;
worker_connections 1024;
}
http {
server {
listen 443;
server_name www.baidu.com; # 域名
ssl on;
root /usr/share/nginx/html;
index index.html index.htm;
ssl_certificate cert/214292799730473.pem; # 证书
ssl_certificate_key cert/214292799730473.key; # 证书
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
location / {
index index.html index.htm;
}
}
# 80转443 http转https
server {
listen 80;
server_name www.badu.com; # 域名
rewrite ^(.*) https://www.badu.com/$1 permanent; # 地址重定向
}
}
6. nginx 常见问题及解决方案
http{} 里配置全局生效 server{} 里配置 局部生效
- 使用nginx后上传文件请求体过大
- nginx默认是1M 增加或修改 client_max_body_size 100M;
希望大家提出问题,完善问题