Nginx (engine x) — это легкий высокопроизводительный HTTP и обратный прокси-сервер, а также прокси-сервер общего назначения (TCP/UDP/IMAP/POP3/SMTP), изначально написанный россиянином Игорем Сысоевым.
основные команды
nginx -t 检查配置文件是否有语法错误
nginx -s reload 热加载,重新加载配置文件
nginx -s stop 快速关闭
nginx -s quit 等待工作进程处理完成后关闭
После сборки и запуска сервера nginx давайте сначала рассмотрим конфигурацию nginx по умолчанию, а затем один за другим представим различные сценарии использования.
распределение по умолчанию
В каталоге установки Nginx делаем копию `nginx.conf`成
`nginx.conf.default`
Сделайте резервную копию как файл конфигурации, затем измените`nginx.conf`
# 工作进程的数量
worker_processes 1;
events {
worker_connections 1024; # 每个工作进程连接数
}
http {
include mime.types;
default_type application/octet-stream;
# 日志格式
log_format access '$remote_addr - $remote_user [$time_local] $host "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for" "$clientip"';
access_log /srv/log/nginx/access.log access; # 日志输出目录
gzip on;
sendfile on;
# 链接超时时间,自动断开
keepalive_timeout 60;
# 虚拟主机
server {
listen 8080;
server_name localhost; # 浏览器访问域名
charset utf-8;
access_log logs/localhost.access.log access;
# 路由
location / {
root www; # 访问根目录
index index.html index.htm; # 入口文件
}
}
# 引入其他的配置文件
include servers/*;
}
построить сайт
В другом каталоге `servers` файла конфигурации добавьте новый файл конфигурации сайта xx.conf.
Добавлен файл Hosts компьютера 127.0.0.1xx_domian
# 虚拟主机
server {
listen 8080;
server_name xx_domian; # 浏览器访问域名
charset utf-8;
access_log logs/xx_domian.access.log access;
# 路由
location / {
root www; # 访问根目录
index index.html index.htm; # 入口文件
}
}
Запустите nginx -s reload, после успешного доступа к браузеруxx_domian чтобы увидеть вашу страницу
Установите время истечения срока действия в зависимости от типа файла
location ~.*\.css$ {
expires 1d;
break;
}
location ~.*\.js$ {
expires 1d;
break;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
access_log off;
expires 15d; #保存15天
break;
}
# curl -x127.0.0.1:80 http://www.test.com/static/image/common/logo.png -I #测试图片的max-age
Отключить кеширование файлов
Среда разработки часто изменяет код, потому что кэш браузера необходимо обновить, чтобы увидеть эффект. Здесь мы можем отключить кеширование браузера для повышения эффективности.
location ~* \.(js|css|png|jpg|gif)$ {
add_header Cache-Control no-store;
}
противоугонная цепь
Может предотвратить вызов файлов другими веб-сайтами
location ~* \.(gif|jpg|png)$ {
# 只允许 192.168.0.1 请求资源
valid_referers none blocked 192.168.0.1;
if ($invalid_referer) {
rewrite ^/ http://$host/logo.png;
}
}
Статическое сжатие файлов
server {
# 开启gzip 压缩
gzip on;
# 设置gzip所需的http协议最低版本 (HTTP/1.1, HTTP/1.0)
gzip_http_version 1.1;
# 设置压缩级别,压缩级别越高压缩时间越长 (1-9)
gzip_comp_level 4;
# 设置压缩的最小字节数, 页面Content-Length获取
gzip_min_length 1000;
# 设置压缩文件的类型 (text/html)
gzip_types text/plain application/javascript text/css;
}
Выполните команду nginx -s reload, доступ к браузеру после успеха
Укажите конкретную страницу ошибки
# 根据状态码,返回对于的错误页面
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /source/error_page;
}
Выполните команду nginx -s reload, доступ к браузеру после успеха
междоменная проблема
Определение перекрестного домена
Политика того же источника ограничивает взаимодействие документов или сценариев, загруженных из одного источника, с ресурсами из другого источника. Это важный механизм безопасности для изоляции потенциально вредоносных файлов. Операции чтения между разными источниками обычно не допускаются.
Определение гомологии
Две страницы имеют один и тот же источник, если их протокол, порт (если указан) и доменное имя совпадают.
Принцип решения междоменных задач nginx
Например:
- Имя домена внешнего сервера:
http://xx_domain
- Доменное имя внутреннего сервера:
https://github.com
Сейчасhttp://xx_domain
правильноhttps://github.com
Инициирование запроса обязательно будет происходить междоменным.
Но нужно только запустить сервер nginx, будетserver_name
Установить какxx_domain
, а затем установите соответствующее расположение для перехвата внешних запросов, требующих междоменного доступа, и, наконец, прокси-сервер обратного запроса.github.com
. Например, следующая конфигурация:
## 配置反向代理的参数
server {
listen 8080;
server_name xx_domain
## 1. 用户访问 http://xx_domain,则反向代理到 https://github.com
location / {
proxy_pass https://github.com;
proxy_redirect off;
proxy_set_header Host $host; # 传递域名
proxy_set_header X-Real-IP $remote_addr; # 传递ip
proxy_set_header X-Scheme $scheme; # 传递协议
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
Это прекрасно обходит политику браузера с одинаковым происхождением:github.com
доступnginx
изgithub.com
относится к доступу того же происхождения, в то время какnginx
Запросы, пересылаемые на сервер, не активируют политику браузера с тем же источником.