Nginx配置


一. 摘要

下面的内容均是根据经验而写,没有参考官方文档,少部分内容也未曾测试,难免会很不严谨或者有错的地方,以后慢慢补充,官方文档以后再看~

二. 配置

1. 配置要点

用户:

可以是系统内的任一用户,但由于权限问题,不要使用权限过高的用户(很危险),权限过低的用户(应该是这个问题)会造成访问不了页面;

server

每一个server是一个监听点:

  • default_server:当所有监听同一个端口的serverserver_name都匹配不上的时候,就会选定是default_server,通常用来处理泛解析带来的域名回收处理;如果没有显式定义default_server的时候,就会默认是第一个server

  • listen:监听的端口;

  • root:该server的根目录;

  • location:路径,location后面的路径(支持正则表达式)就会替换成花括号里面的路径(但前面要有root),如

  上面的/image/将会去/usr/share/web/NetDisk/找,其中的root应该就是花括号上面的root一样(但没测试过);

  • error_page:错误页面;

2. ssl证书配置

基本上和普通的server配置差不多,就是需要加上证书和密钥的位置;

(注:文件的放置位置最好和默认的一样,那才是标准的位置)

3. 代理

nginx本身就是一款高性能的反向代理服务器,个人比较喜欢使用80端口代理其他不同端口的站点

 proxy_pass反向代理本地http
  • 一共需要两个server

  • 先加上端口的监听的server

  • 在另一个端口的server常规配置就行

 proxy_pass反向代理本地https
  • 和上面的代理http差不多,但需要注意的是,监听的并代理的server必须加上证书与协议相关的参数,否则TLS服务将无法使用,网页访问不了:

上面是对本地4430端口的反向代理,4430端口访问的站点也是https协议,代理的时候可以用https://127.0.0.1:4430也可以用http://127.0.0.1:4430(对应的部署使用对应的协议),因此最好将4430端口的站点部署为http,用http进行访问(个人觉得这样可能这样性能会高一些,因为https要加密,所有应该是必然的),因为本身客户端通过443访问的时候已经使用了https,因此这里不用担心安全性问题,但是如果你担心4430端口的站点被用户直接用http协议访问,也可以将4430端口的站点部署为https或者使用以下方法:增加一个4430端口的httpserverserver_name设为127.0.0.1,另一个server保持为https,这样反向代理用的是http://127.0.0.1:4430,就会走http,而通过http直接访问4430端口的将会提示网关错误(使用的协议错误)

 rewrite重定向
  • 在需要重定向的server里加上下面的代码就行:

  一般用于http自动跳转到https,其他的用途也行;

4.配置PHP服务

三. 总结

1. 注意事项

  • 如果添加的sever太多的话,就会出现这样的错误:

  解决方法:server_names_hash_bucket_size 64;

  • 如果使用的SSL证书绑定的域名和访问的域名不一样的话,浏览器就会出现证书错误或者证书不受信任的提示,这时候需要为访问的域名申请一个证书(有免费的),在该站点的server里进行添加;
  • 如果使用反向代理proxy_pass,文件传输速度将会严重下降(虽然代理是127.0.0.1,数据应该不会转出服务器,感觉是出了外网然后再回来,就相当于在服务器访问4431端口站点4431端口将数据发出公网然后444端口接收回来,444端口再将数据发给客户端,可能真的是这样,毕竟网页的样式表文件什么我习惯用127.0.0.1,但客户端访问并没问题,所以这里的127.0.0.1可能有点不一样。说是这样说,但是从路由器的设备监控来看(服务器其实是一台手机),发出公网的数据就只有一份而已,也就是代理的数据并不会出公网,下图)左图是直接利用端口访问,右图是使用反向代理:

 

  •  nginx的项目部署:

  1. 配置文件头顶的user需要更改为服务器里存在的用户,否则网页无法访问;部署前记得将原来的注释掉;

  2. 可以在server外进行部署,或者在location的大括号里,但是必须是:“root 项目路径 html 网页文件这样的两行格式,这样的格式,不能直接为“root 网页文件全路径这样的一行格式;

  3. 每一个sever都是一个站点;

  4. 如果想要端口代理的话,则一个端口需要两个server,一个是80端口监听域名代理,另一个是真正的端口对应的站点;

2.总结

上面的都是我日常的总结,其实我并没有真正部署过什么项目,都是平时乱搞的,有问题都是百度的,然后根据自己的总结写出上面的配置,所以并没有真正参考过官方文档,应该上面的配置会很不严谨,所以建议大家看官方文档。

示例:

  1 # For more information on configuration, see:
  2 #   * Official English Documentation: http://nginx.org/en/docs/
  3 #   * Official Russian Documentation: http://nginx.org/ru/docs/
  4 
  5 user MengZB;
  6 worker_processes auto;
  7 error_log /var/log/nginx/error.log;
  8 pid /run/nginx.pid;
  9 
 10 # Load dynamic modules. See /usr/share/nginx/README.dynamic.
 11 include /usr/share/nginx/modules/*.conf;
 12 
 13 events {
 14     worker_connections 1024;
 15 }
 16 
 17 http {
 18     log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
 19                       '$status $body_bytes_sent "$http_referer" '
 20                       '"$http_user_agent" "$http_x_forwarded_for"';
 21 
 22     access_log  /var/log/nginx/access.log  main;
 23 
 24     sendfile            on;
 25     tcp_nopush          on;
 26     tcp_nodelay         on;
 27     keepalive_timeout   65;
 28     types_hash_max_size 2048;
 29 
 30     include             /etc/nginx/mime.types;
 31     default_type        application/octet-stream;
 32 
 33     # Load modular configuration files from the /etc/nginx/conf.d directory.
 34     # See http://nginx.org/en/docs/ngx_core_module.html#include
 35     # for more information.
 36     include /etc/nginx/conf.d/*.conf;
 37 
 38 #如果添加的server太多,必须在http的花括号里面添加下面这段代码,
 39 #如果还不够的话后面的数字继续往上加
 40     server_names_hash_bucket_size 64;
 41 
 42 
 43 #下面用于http代理的server都是监听81端口,宽带的80端口被封了
 44 
 45 #监听81端口,代理域名为mzb.cxyngu.com的站点(没部署东西,目前就是用来玩的,部署的话最好用https,http不安全)
 46     server {
 47         listen       81; #default_server;
 48         listen       [::]:81; # default_server;
 49 #        server_name  _;
 50         server_name  mzb.cxyngu.com;
 51 #        root         /usr/share/nginx/html;
 52         # Load configuration files for the default server block.
 53         include /etc/nginx/default.d/*.conf;
 54 
 55         location / {
 56             proxy_pass http://127.0.0.1:82;#代理82端口的站点,即对外界来看mzb.cxyngu.com的网站就是82端口的站点
 57         }
 58 
 59         error_page 404 /404.html;
 60             location = /40x.html {
 61         }
 62 
 63         error_page 500 502 503 504 /50x.html;
 64             location = /50x.html {
 65         }
 66     }
 67 
 68 #监听81端口,将所有除mzb记录外的cxyngu.com的http解析都重定向到https
 69 
 70     server {
 71 
 72 #default_server 的作用就是如果server_name都匹配不上,那么就会是default_server;
 73 
 74         listen       81 default_server;
 75         listen       [::]:81 default_server;
 76 #        server_name  _;
 77     server_name  *.cxyngu.com;#使用泛解析
 78         root         /usr/share/nginx/html;
 79 #    rewrite ^(.*) https://home.cxyngu.com:444/ permanent; #自动跳到https
 80     rewrite ^(.*) http://webdisk.cxyngu.com/ permanent;#将访问重定向到https,这里的webdisk.cxyngu.com是我在阿里云域名解析那里添加的隐式解析,解析到的是https://home.cxyngu.com:444
 81         # Load configuration files for the default server block.
 82         include /etc/nginx/default.d/*.conf;
 83 
 84         location / {
 85         }
 86 
 87         error_page 404 /404.html;
 88             location = /40x.html {
 89         }
 90 
 91         error_page 500 502 503 504 /50x.html;
 92             location = /50x.html {
 93         }
 94     }
 95 
 96     server{
 97     listen         82;
 98 #        root /usr/share/web/temp/;
 99 
100     location /{
101             root /usr/share/web/temp/;
102             index Theme.html;
103     }
104         error_page 404 /404.html;
105             location = /40x.html {
106         }
107 
108         error_page 500 502 503 504 /50x.html;
109             location = /50x.html {
110         }
111     }
112 
113  #Settings for a TLS enabled server.
114 #下面全用444端口进行https监听,因为宽带的443、445端口都被封了
115 
116 #监听的并代理的https的server必须加上证书与协议相关的参数,否则TLS服务将无法使用,网页访问不了(目前测试是这样)
117 
118 #监听444端口,代理域名www.cxyngu.com 
119     server {
120         listen       444 ssl default_server;
121         listen       [::]:444 ssl default_server;
122         server_name  www.cxyngu.com cxyngu.com;
123         # Load configuration files for the default server block.
124         include /etc/nginx/default.d/*.conf;
125 
126     #证书文件
127         ssl_certificate "/etc/pki/nginx/www.cxyngu.com_bundle.crt";
128         ssl_certificate_key "/etc/pki/nginx/private/www.cxyngu.com.key";
129         ssl_session_cache shared:SSL:1m;
130         ssl_session_timeout  10m;
131         ssl_ciphers HIGH:!aNULL:!MD5;
132         ssl_prefer_server_ciphers on;
133 
134         # Load configuration files for the default server block.
135         include /etc/nginx/default.d/*.conf;
136         location / {
137             
138         proxy_pass https://127.0.0.1:4430;#反向代理到4430端口
139         
140         #测试:观察能否访问B站(结果是可以)
141         #proxy_pass https://bilibili.com;
142         }
143 
144         error_page 404 /404.html;
145             location = /40x.html {
146         }
147 
148         error_page 500 502 503 504 /50x.html;
149             location = /50x.html {
150         }
151     }
152 #监听444端口,代理域名home.cxyngu.com
153     server {
154         listen       444 ssl; 
155     listen       [::]:444 ssl;
156         server_name  home.cxyngu.com;
157 
158     ssl_certificate "/etc/pki/nginx/home.cxyngu.com.pem";
159         ssl_certificate_key "/etc/pki/nginx/private/home.cxyngu.com.key";
160         ssl_session_cache shared:SSL:1m;
161         ssl_session_timeout  10m;
162         ssl_ciphers HIGH:!aNULL:!MD5;
163         ssl_prefer_server_ciphers on;
164 
165         # Load configuration files for the default server block.
166         include /etc/nginx/default.d/*.conf;
167 
168         location / {
169             proxy_pass https://127.0.0.1:4431;#反向代理到4431端口
170         }
171 
172         error_page 404 /404.html;
173             location = /40x.html {
174         }
175 
176        error_page 500 502 503 504 /50x.html;
177             location = /50x.html {
178         }
179     }
180 
181 #域名cxyngu.com、www.cxyngu.com的站点(还没想好部署什么网站,还没部署完,等部署的时候参考下面的home.cxyngu.com的部署)
182     server {
183         listen       4430 ssl http2 default_server;
184         listen       [::]:4430 ssl http2 default_server;
185         server_name  cxyngu.com www.cxyngu.com;
186 #        root         /usr/share/nginx/html;
187     #证书文件
188         ssl_certificate "/etc/pki/nginx/www.cxyngu.com_bundle.crt";
189         ssl_certificate_key "/etc/pki/nginx/private/www.cxyngu.com.key";
190         ssl_session_cache shared:SSL:1m;
191         ssl_session_timeout  10m;
192         ssl_ciphers HIGH:!aNULL:!MD5;
193         ssl_prefer_server_ciphers on;
194 
195         # Load configuration files for the default server block.
196         include /etc/nginx/default.d/*.conf;
197 
198         location / {
199         root /usr/share/web/NetDisk/;
200         index index.html;
201         }
202 
203         error_page 404 /404.html;
204             location = /40x.html {
205         }
206 
207         error_page 500 502 503 504 /50x.html;
208             location = /50x.html {
209         }
210     }
211 
212 
213 #域名home.cxyngu.com的站点(打算用于部署网盘)
214 
215 #可直接访问的4431端口的server,目的是防止用户直接使用443端口进行访问
216 
217     server {
218         listen       4431 ssl http2 default_server;
219         listen       [::]:4431 ssl http2 default_server;
220         server_name  home.cxyngu.com;
221         #证书文件
222         ssl_certificate "/etc/pki/nginx/home.cxyngu.com.pem";
223         ssl_certificate_key "/etc/pki/nginx/private/home.cxyngu.com.key";
224         ssl_session_cache shared:SSL:1m;
225         ssl_session_timeout  10m;
226         ssl_ciphers HIGH:!aNULL:!MD5;
227         ssl_prefer_server_ciphers on;
228 
229         # Load configuration files for the default server block.
230         include /etc/nginx/default.d/*.conf;
231 
232         location / {
233             root /usr/share/web/NetDisk/;
234             index index.html;
235 #或者:(但是再用代理的话可能又会增加服务器负担,因此这里直接部署)
236 #         proxy_pass http://127.0.0.1:4431
237         }
238 
239         error_page 404 /404.html;
240             location = /40x.html {
241         }
242 
243         error_page 500 502 503 504 /50x.html;
244             location = /50x.html {
245         }
246     }
247 #特地增加一个http的server用于服务器本地的反向代理(不用https,防止降低性能)
248     server {
249         listen       4431; #http2 default_server;
250         listen       [::]:4431; #http2 default_server;
251         server_name  127.0.0.1;
252         #证书文件
253         # Load configuration files for the default server block.
254         include /etc/nginx/default.d/*.conf;
255 
256         location / {
257 #            root /usr/share/web/NetDisk/;
258 #            index index.html;
259             root /usr/share/web/temp/;
260             index Theme.html;
261         }
262 
263         error_page 404 /404.html;
264             location = /40x.html {
265         }
266 
267         error_page 500 502 503 504 /50x.html;
268             location = /50x.html {
269         }
270     }
271 }