nginx
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nginx相关的知识,希望对你有一定的参考价值。
nginx 技术文档
nginx 介绍
Nginx ("engine x") 是一个开源的,支持高性能、高并发的 Web 服务和代理服务软件。
反向代理
反向代理就是当请求访问你的代理服务器时,代理服务器会对你的请求进行转发,可以转发到静态的资源路径上去,也可以转发到动态的服务接口上去。
-
静态代理
静态代理就是将请求代理到不同的静态资源路径上去(前端的项目用 nginx 做静态代理)
-
动态代理
动态代理就是把代理服务器的请求转发到另一个服务上去(把请求转到后台)
-
图示
nginx 安装
Linux 下 nginx 安装
-
确认系统中安装了
gcc pcre-devel zlib-devel openssl openssl-devel
软件包#安装命令 yum -y install gcc pcre-devel zlib-devel openssl openssl-devel
-
下载 nginx 安装包(nginx-1.9.0.tar.gz)
-
安装
# 将安装包移动到安装目录下 mv nginx-1.9.0.tar.gz /usr/local/nginx # 解压 tar -zxvf nginx-1.9.0.tar.gz # 配置 cd nginx-1.9.0 # Configure是一个可执行脚本有很多选项,在待安装的源码路径下使用命令 # ./configure–help输出详细的选项列表 ./configure --prefix=/usr/local/nginx #--prefix选项是配置安装的路径 # 安装 make #编译 make install #安装
-
测试是否安装成功,配置开机自启
#测试是否安装成功 cd /usr/loca/nginx/ ./sbin/nginx -t #配置开机自启 vim /etc/rc.d/rc.local #重启 nginx /usr/local/nginx/sbin/nginx -s reload
Docker 下 nginx 安装
-
下载 nginx 镜像
docker pull nginx:1.10
-
copy 容器中 nginx 配置
# 先运行一次容器(为了拷贝配置文件) docker run -p 80:80 --name nginx -v /mydata/nginx/html:/usr/share/nginx/html -v /mydata/nginx/logs:/var/log/nginx -d nginx:1.10 # 将容器内的配置文件拷贝到指定目录 docker container cp nginx:/etc/nginx /mydata/nginx/ # 修改文件名称 mv nginx conf # 终止并删除容器 docker stop nginx docker rm nginx
-
使用 Docker命令启动 nginx 容器
docker run -p 80:80 --name nginx -v /mydata/nginx/html:/usr/share/nginx/html -v /mydata/nginx/logs:/var/log/nginx -v /mydata/nginx/conf:/etc/nginx -d nginx:1.10
nginx 配置
宿主机配置
-
目录结构(版本不同,目录结构不同)
-
配置文件
- 图解
-
nginx 1.9.0
#主配置文件 nginx.conf worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; #tcp_nopush on; #keepalive_timeout 0; keepalive_timeout 65; #压缩配置 gzip on; #开启gzip gzip_disable "msie6"; #IE6不使用gzip gzip_vary on; #设置为on会在Header里增加 "Vary: Accept-Encoding" gzip_proxied any; #代理结果数据的压缩 gzip_comp_level 6; #gzip压缩比(1~9),越小压缩效果越差,但是越大处理越慢,所以一般取中间值 gzip_buffers 16 8k; #获取多少内存用于缓存压缩结果 gzip_http_version 1.1; #识别http协议的版本 gzip_min_length 1k; #设置允许压缩的页面最小字节数,超过1k的文件会被压缩 gzip_types application/javascript text/css; #对特定的MIME类型生效,js和css文件会被压缩 server { #https(监听443 云服务器需要开启443安全组) listen 443; server_name xxx.xxx.com; ssl on; ssl_certificate /usr/local/_.topwellsoft.com_bundle.crt; ssl_certificate_key /usr/local/topwellsoft.com.key; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; ssl_ciphers EECDH+ECDSA+AESGCM:EECDH+aRSA+AESGCM:EECDH+ECDSA+SHA384:EECDH+ECDSA+SHA256:EECDH+aRSA+SHA384:EECDH+aRSA+SHA256:EECDH:EDH+aRSA:HIGH:!aNULL:!eNULL:!LOW:!RC4:!3DES:!MD5:!EXP:!PSK:!SRP:!SEED:!DSS:!CAMELLIA; location / { root html; index index.html index.htm; } #旅游项目后台 location /tptrip/ { proxy_pass http://localhost:8087/; } #旅游项目手机端 location /tptrip/mobile/ { proxy_pass http://localhost:8088/tptrip/mobile/; #请求容器中的手机端项目 index index.html index.htm; } #旅游项目pc端 location /tptrip/trip/ { #proxy_pass http://172.18.0.9:80/tptrip/trip/; #请求容器中的pc端项目 proxy_pass http://localhost:8086/tptrip/trip/; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } }
# nginx.conf.default 同上
-
nginx 1.16.1
#主配置文件 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; #加载 /etc/nginx/conf.d/ 目录下的所有*.conf 文件,作为子配置文件 include /etc/nginx/conf.d/*.conf; }
#默认配置文件 default.conf upstream gisserver{ server xxxx; } 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; } listen 8080; location /traffic { root /root/tp_traffic_visualization/dist; } # location / { # proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # proxy_set_header Host $http_host; # proxy_pass http://gisserver; # } # location /iserver { # client_body_buffer_size 10m; # client_max_body_size 100m; # proxy_pass http://gisserver; # } #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 /usr/share/nginx/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; #} }
容器内配置
-
目录结构
-
配置
# 生成 docker 镜像 FROM nginx:stable-alpine WORKDIR /data # copy 容器外配置文件到 nginx 默认安装路径下(覆盖默认配置文件) #注意,先把容器生成的默认配置文件 copy 到容器外,在此基础上修改生成我们自己的配置文件 COPY nginx/nginx.conf /etc/nginx/nginx.conf #copy 编译后的前端项目到 /usr/share/nginx/html/tptrip/trip/ #访问地址:https://xxx:端口号/tptrip/trip/ COPY dist/ /usr/share/nginx/html/tptrip/trip/ #声明运行时容器提供服务端口,只是一个声明,在运行时并不会因为这个声明应用就会开启这个端口的服务。写成 80不用更改 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]
# nginx.conf 主配置文件 user nginx; worker_processes auto; 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; server { #charset koi8-r; #access_log logs/host.access.log main; # location / { # root html; # index index.html index.htm; # } listen 80; location /tptrip/trip/ { root /usr/share/nginx/html/tptrip/trip/; if (!-e $request_filename) { rewrite ^(.*)$ /index.html?s=$1 last; break; } } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } keepalive_timeout 65; #gzip on; gzip on; #开启gzip gzip_disable "msie6"; #IE6不使用gzip gzip_vary on; #设置为on会在Header里增加 "Vary: Accept-Encoding" gzip_proxied any; #代理结果数据的压缩 gzip_comp_level 6; #gzip压缩比(1~9),越小压缩效果越差,但是越大处理越慢,所以一般取中间值 gzip_buffers 16 8k; #获取多少内存用于缓存压缩结果 gzip_http_version 1.1; #识别http协议的版本 gzip_min_length 1k; #设置允许压缩的页面最小字节数,超过1k的文件会被压缩 gzip_types application/javascript text/css; #对特定的MIME类型生效,js和css文件会被压缩 include /etc/nginx/conf.d/*.conf; }
以上是关于nginx的主要内容,如果未能解决你的问题,请参考以下文章