วิธีการคอมไพล์ Nginx จากซอร์สบนเดเบียน 10

บทนำ

Nginxเป็นซอฟต์แวร์โอเพ่นซอร์สเว็บเซิร์ฟเวอร์ที่ออกแบบมาพร้อมกับความพร้อมใช้งานสูงซึ่งสามารถใช้เป็นเซิร์ฟเวอร์ HTTP / HTTPS, พร็อกซีเซิร์ฟเวอร์ย้อนกลับ, พร็อกซีเซิร์ฟเวอร์เมล, พร็อกซีเซิร์ฟเวอร์เมล, ตัวโหลดบาลานซ์ซอฟต์แวร์, TLS terminator, แคชเซิร์ฟเวอร์และอื่น ๆ !

เป็นซอฟต์แวร์ที่แยกส่วนได้อย่างมาก แม้แต่บางส่วนของ "ในตัว" ของซอฟต์แวร์เช่น GZIP หรือ SSL ก็ถูกสร้างขึ้นจริง ๆ เป็นโมดูลที่สามารถเปิดใช้งานและปิดการใช้งานในช่วงเวลาที่สร้าง

มันมีโมดูลหลัก (ดั้งเดิม) และโมดูลบุคคลที่สาม (ภายนอก) ที่สร้างขึ้นโดยชุมชน ตอนนี้มีโมดูลของบุคคลที่สามมากกว่าร้อยที่เราสามารถใช้ประโยชน์ได้

เขียนใน C เป็นซอฟต์แวร์ที่รวดเร็วและมีน้ำหนักเบา

การติดตั้ง Nginx จากซอร์สโค้ดนั้นค่อนข้างง่าย - ดาวน์โหลดซอร์สโค้ด Nginx เวอร์ชันล่าสุดกำหนดค่าสร้างและติดตั้ง

คุณจะต้องเลือกว่าจะดาวน์โหลดการฉีดหรือเวอร์ชันที่เสถียร แต่การสร้างมันเหมือนกัน

ในคู่มือนี้เราจะรวบรวม Nginx เวอร์ชั่น Debian 10 บน Debian 10 (บัสเตอร์) เราจะใช้โมดูลที่มีอยู่ทั้งหมดในเวอร์ชันโอเพ่นซอร์สของ Nginx

ทำไมต้องคอมไพล์และติดตั้ง Nginx จากซอร์สโค้ด

คุณอาจถามว่าทำไมคอมไพล์ Nginx จากแหล่งที่มาเมื่อคุณสามารถใช้แพ็คเกจที่เตรียมไว้ได้ นี่คือสาเหตุบางส่วนที่คุณอาจต้องการรวบรวมซอฟต์แวร์เฉพาะด้วยตนเอง:

  • เพื่อควบคุมตัวเลือกการกำหนดค่า
  • ในการติดตั้งซอฟต์แวร์ได้ทุกที่ที่คุณต้องการ คุณสามารถติดตั้งซอฟต์แวร์เดียวกันหลายเวอร์ชันได้
  • เพื่อควบคุมเวอร์ชันที่คุณติดตั้ง การแจกแจงไม่ได้อัพเดทอยู่เสมอกับแพ็คเกจล่าสุดทุกรุ่นโดยเฉพาะอย่างยิ่งส่วนเสริมในแพ็คเกจซอฟต์แวร์
  • เพื่อให้เข้าใจถึงวิธีการทำงานของซอฟต์แวร์ได้ดีขึ้น

รุ่นที่มั่นคงกับการฉีด

Nginx Open Source มีสองเวอร์ชัน:

  • Mainline - รวมถึงฟีเจอร์ล่าสุดและการแก้ไขข้อบกพร่องและอัพเดทอยู่เสมอ มีความน่าเชื่อถือ แต่อาจรวมถึงโมดูลทดลองบางส่วนและอาจมีข้อบกพร่องใหม่จำนวนหนึ่ง
  • มีเสถียรภาพ - ไม่รวมคุณลักษณะล่าสุดทั้งหมด แต่มีการแก้ไขข้อบกพร่องที่สำคัญซึ่งจะย้อนกลับไปที่เวอร์ชัน mainline เสมอ

โมดูลหลักเทียบกับโมดูลของบุคคลที่สาม

Nginx มีโมดูลสองประเภทที่คุณสามารถใช้: โมดูลหลักและโมดูลของบุคคลที่สาม

นักพัฒนาหลัก Nginx สร้างโมดูลหลักและเป็นส่วนหนึ่งของซอฟต์แวร์

ชุมชนสร้างโมดูลบุคคลที่สามและคุณสามารถใช้พวกเขาเพื่อขยายการทำงาน มีโมดูลบุคคลที่สามที่เป็นประโยชน์มากมาย

โมดูลคงที่เมื่อเทียบกับโมดูลแบบไดนามิก

โมดูลคงอยู่ใน Nginx จากรุ่นแรกมาก โมดูลแบบไดนามิกถูกนำมาใช้กับ Nginx 1.9.11+ ในเดือนกุมภาพันธ์ 2559

ด้วยโมดูลสแตติกชุดของโมดูลที่ประกอบด้วยไบนารี Nginx จะถูกแก้ไขในเวลาคอมไพล์โดย./configureสคริปต์ โมดูลคงที่ใช้--with-foo_bar_moduleหรือ--add-module=PATHไวยากรณ์

การรวบรวมหลัก (มาตรฐาน) โมดูลแบบไดนามิกเราเพิ่มเช่น=dynamic--with-http_image_filter_module=dynamic

ในการรวบรวมโมดูลบุคคลที่สามเป็นแบบไดนามิกเราใช้--add-dynamic-module=/path/to/moduleไวยากรณ์และจากนั้นเราโหลดโดยใช้load_moduleคำสั่งในบริบทโลกของnginx.confไฟล์

ข้อกำหนดสำหรับการสร้าง Nginx จากแหล่งที่มา

เมื่อเปรียบเทียบกับซอฟต์แวร์ UNIX / Linux อื่น ๆ Nginx นั้นค่อนข้างเบาและไม่มีการพึ่งพาไลบรารีมากมาย การกำหนดค่าเริ่มต้นของการสร้างขึ้นอยู่กับ 3 ไลบรารีเท่านั้นที่จะติดตั้ง: OpenSSL / LibreSSL / BoringSSL, Zlib และ PCRE

หมายเหตุ : Nginx สามารถคอมไพล์กับไลบรารี crypto ของ LibreSSL และ BoringSSL แทน OpenSSL

ก่อนที่จะเริ่ม

ตรวจสอบเวอร์ชั่นของเดเบียน

lsb_release -ds
# Debian GNU/Linux 10 (buster)

สร้างผู้ใช้ปกติด้วยsudoการเข้าถึง

adduser johndoe --gecos "John Doe"
usermod -aG sudo johndoe

หมายเหตุ : แทนที่johndoeด้วยชื่อผู้ใช้ของคุณ

เปลี่ยนเป็นผู้ใช้ใหม่

su - johndoe

ตั้งค่าเขตเวลา

sudo dpkg-reconfigure tzdata

อัปเดตซอฟต์แวร์ของระบบปฏิบัติการของคุณ

sudo apt update && sudo apt upgrade -y

ติดตั้งแพ็คเกจที่จำเป็น

sudo apt install -y software-properties-common ufw

สร้าง Nginx จากแหล่งที่มา

Nginx เป็นโปรแกรมที่เขียนใน C ดังนั้นคุณจะต้องติดตั้งเครื่องมือคอมไพเลอร์ก่อน ติดตั้งbuild-essential, และgittree

sudo apt install -y build-essential git tree

ดาวน์โหลดเวอร์ชันล่าสุดของซอร์สโค้ด Nginx และคลายการบีบอัดซอร์สโค้ด ซอร์สโค้ด Nginx ถูกแจกจ่ายเป็นไฟล์เก็บถาวรที่บีบอัดซึ่งเป็นซอฟต์แวร์ Unix และ Linux ส่วนใหญ่

wget https://nginx.org/download/nginx-1.17.2.tar.gz && tar zxvf nginx-1.17.2.tar.gz

ดาวน์โหลดซอร์สโค้ดที่ต้องพึ่งพา Nginx และแตกไฟล์

# PCRE version 8.43
wget https://ftp.pcre.org/pub/pcre/pcre-8.43.tar.gz && tar xzvf pcre-8.43.tar.gz

# zlib version 1.2.11
wget https://www.zlib.net/zlib-1.2.11.tar.gz && tar xzvf zlib-1.2.11.tar.gz

# OpenSSL version 1.1.1c
wget https://www.openssl.org/source/openssl-1.1.1c.tar.gz && tar xzvf openssl-1.1.1c.tar.gz

ติดตั้งการพึ่งพา Nginx ซึ่งเป็นตัวเลือก

sudo apt install -y perl libperl-dev libgd3 libgd-dev libgeoip1 libgeoip-dev geoip-bin libxml2 libxml2-dev libxslt1.1 libxslt1-dev

ล้าง.tar.gzไฟล์ทั้งหมด เราไม่ต้องการอีกต่อไป

rm -rf *.tar.gz

ป้อนไดเรกทอรีต้นทาง Nginx

cd ~/nginx-1.17.2

treeสำหรับการที่ดีไดเรกทอรีรายชื่อวัดและไฟล์ที่เขียนรหัสที่มากับ Nginx

tree -L 2 .

/usr/share/man/man8/คัดลอกหน้าด้วยตนเองเพื่อ

sudo cp ~/nginx-1.17.2/man/nginx.8 /usr/share/man/man8
sudo gzip /usr/share/man/man8/nginx.8
ls /usr/share/man/man8/ | grep nginx.8.gz
# Check that man page for Nginx is working
man nginx

สำหรับความช่วยเหลือคุณสามารถดูรายการเต็มรูปแบบของตัวเลือกการคอมไพล์ Nginx ล่าสุดโดยเรียกใช้ตัวเลือกต่อไปนี���

./configure --help
# To see want core modules can be built as dynamic run:
./configure --help | grep -F =dynamic

กำหนดค่าคอมไพล์และติดตั้ง Nginx

./configure --prefix=/etc/nginx \
            --sbin-path=/usr/sbin/nginx \
            --modules-path=/usr/lib/nginx/modules \
            --conf-path=/etc/nginx/nginx.conf \
            --error-log-path=/var/log/nginx/error.log \
            --pid-path=/var/run/nginx.pid \
            --lock-path=/var/run/nginx.lock \
            --user=nginx \
            --group=nginx \
            --build=Debian \
            --builddir=nginx-1.17.2 \
            --with-select_module \
            --with-poll_module \
            --with-threads \
            --with-file-aio \
            --with-http_ssl_module \
            --with-http_v2_module \
            --with-http_realip_module \
            --with-http_addition_module \
            --with-http_xslt_module=dynamic \
            --with-http_image_filter_module=dynamic \
            --with-http_geoip_module=dynamic \
            --with-http_sub_module \
            --with-http_dav_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_degradation_module \
            --with-http_slice_module \
            --with-http_stub_status_module \
            --with-http_perl_module=dynamic \
            --with-perl_modules_path=/usr/share/perl/5.26.1 \
            --with-perl=/usr/bin/perl \
            --http-log-path=/var/log/nginx/access.log \
            --http-client-body-temp-path=/var/cache/nginx/client_temp \
            --http-proxy-temp-path=/var/cache/nginx/proxy_temp \
            --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp \
            --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp \
            --http-scgi-temp-path=/var/cache/nginx/scgi_temp \
            --with-mail=dynamic \
            --with-mail_ssl_module \
            --with-stream=dynamic \
            --with-stream_ssl_module \
            --with-stream_realip_module \
            --with-stream_geoip_module=dynamic \
            --with-stream_ssl_preread_module \
            --with-compat \
            --with-pcre=../pcre-8.43 \
            --with-pcre-jit \
            --with-zlib=../zlib-1.2.11 \
            --with-openssl=../openssl-1.1.1c \
            --with-openssl-opt=no-nextprotoneg \
            --with-debug

make
sudo make install

หลังจากการรวบรวมนำทางไปยัง~ไดเรกทอรีhome ( ) ของคุณ

cd ~

symlink ไป/usr/lib/nginx/modules /etc/nginx/modulesนี่เป็นสถานที่มาตรฐานสำหรับโมดูล Nginx

sudo ln -s /usr/lib/nginx/modules /etc/nginx/modules

พิมพ์เวอร์ชัน Nginx เวอร์ชันคอมไพเลอร์และกำหนดค่าพารามิเตอร์สคริปต์

sudo nginx -V

# nginx version: nginx/1.17.2 (Debian)
# built by gcc 8.3.0 (Debian 8.3.0-6)
# built with OpenSSL 1.1.1c  28 May 2019
# TLS SNI support enabled
# configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib/nginx/modules . . .
# . . .
# . . .

สร้างกลุ่มระบบและผู้ใช้ Nginx

sudo adduser --system --home /nonexistent --shell /bin/false --no-create-home --disabled-login --disabled-password --gecos "nginx user" --group nginx
# Check that user and group are created
sudo tail -n 1 /etc/passwd /etc/group /etc/shadow

ตรวจสอบไวยากรณ์ Nginx และข้อผิดพลาดที่อาจเกิดขึ้น

sudo nginx -t
# Will throw this error -> nginx: [emerg] mkdir() "/var/cache/nginx/client_temp" failed (2: No such file or directory)

# Create NGINX cache directories and set proper permissions
sudo mkdir -p /var/cache/nginx/client_temp /var/cache/nginx/fastcgi_temp /var/cache/nginx/proxy_temp /var/cache/nginx/scgi_temp /var/cache/nginx/uwsgi_temp
sudo chmod 700 /var/cache/nginx/*
sudo chown nginx:root /var/cache/nginx/*

# Re-check syntax and potential errors. 
sudo nginx -t

สร้างไฟล์หน่วย Nginx systemd

sudo vim /etc/systemd/system/nginx.service

เติม/etc/systemd/system/nginx.serviceไฟล์ด้วยเนื้อหาต่อไปนี้

[Unit]
Description=nginx - high performance web server
Documentation=https://nginx.org/en/docs/
After=network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target

[Service]
Type=forking
PIDFile=/var/run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t -c /etc/nginx/nginx.conf
ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID

[Install]
WantedBy=multi-user.target

เปิดใช้งาน Nginx เพื่อเริ่มการบู๊ตและเริ่ม Nginx ทันที

sudo systemctl enable nginx.service
sudo systemctl start nginx.service

ตรวจสอบว่า Nginx จะเริ่มต้นโดยอัตโนมัติหลังจากรีบูตหรือไม่

sudo systemctl is-enabled nginx.service
# enabled

ตรวจสอบสถานะ

sudo systemctl status nginx.service

หมายเหตุ : คุณสามารถตรวจสอบว่า Nginx กำลังทำงานอยู่โดยไปที่โดเมนของคุณหรือที่อยู่ IP ในเว็บเบราว์เซอร์ คุณจะเห็นหน้ายินดีต้อนรับ Nginx นั่นเป็นตัวบ่งชี้ว่า Nginx เปิดใช้งาน VPS ของคุณแล้ว

สร้างโปรไฟล์แอปพลิเคชัน UFW Nginx

sudo vim /etc/ufw/applications.d/nginx

คัดลอก / วางเนื้อหาต่อไปนี้ลงใน/etc/ufw/applications.d/nginxไฟล์

[Nginx HTTP]
title=Web Server (Nginx, HTTP)
description=Small, but very powerful and efficient web server
ports=80/tcp

[Nginx HTTPS]
title=Web Server (Nginx, HTTPS)
description=Small, but very powerful and efficient web server
ports=443/tcp

[Nginx Full]
title=Web Server (Nginx, HTTP + HTTPS)
description=Small, but very powerful and efficient web server
ports=80,443/tcp

ตรวจสอบว่าส่วนกำหนดค่าแอปพลิเคชัน UFW ถูกสร้างและรับรู้

sudo ufw app list

# Available applications:
  # Nginx Full
  # Nginx HTTP
  # Nginx HTTPS
  # OpenSSH

Nginx โดยค่าเริ่มต้นสร้างการสำรองข้อมูลไฟล์ใน.default /etc/nginxลบ.defaultไฟล์ออกจาก/etc/nginxไดเรกทอรี

sudo rm /etc/nginx/*.default

สถานที่การเน้นไวยากรณ์ของการกำหนดค่า Nginx ~/.vimสำหรับการแก้ไขเสียงเรียกเข้า

# For regular non-root user
mkdir ~/.vim/
cp -r ~/nginx-1.17.2/contrib/vim/* ~/.vim/
# For root user
sudo mkdir /root/.vim/
sudo cp -r ~/nginx-1.17.2/contrib/vim/* /root/.vim/

หมายเหตุ : เมื่อทำตามขั้นตอนข้างต้นคุณจะได้รับการเน้นไวยากรณ์ที่ดีเมื่อแก้ไขไฟล์กำหนดค่า Nginx ในโปรแกรมแก้ไข Vim

สร้างconf.d, snippets, sites-availableและไดเรกทอรีในsites-enabled/etc/nginx

sudo mkdir /etc/nginx/{conf.d,snippets,sites-available,sites-enabled}

เปลี่ยนการอนุญาตและการเป็นเจ้าของกลุ่มของไฟล์บันทึก Nginx

sudo chmod 640 /var/log/nginx/*
sudo chown nginx:adm /var/log/nginx/access.log /var/log/nginx/error.log

สร้างการกำหนดค่าการหมุนเวียนการบันทึกสำหรับ Nginx

sudo vim /etc/logrotate.d/nginx

เติมไฟล์ด้วยข้อความต่อไปนี้จากนั้นบันทึกและออก

/var/log/nginx/*.log {
    daily
    missingok
    rotate 52
    compress
    delaycompress
    notifempty
    create 640 nginx adm
    sharedscripts
    postrotate
            if [ -f /var/run/nginx.pid ]; then
                    kill -USR1 `cat /var/run/nginx.pid`
            fi
    endscript
}

ลบไฟล์ที่ดาวน์โหลดทั้งหมดจากไดเรกทอรีบ้าน

cd ~
rm -rf nginx-1.17.2/ openssl-1.1.1c/ pcre-8.43/ zlib-1.2.11/

สรุป

แค่นั้นแหละ. ตอนนี้คุณได้ติดตั้ง Nginx เวอร์ชันล่าสุดแล้ว มันถูกรวบรวมแบบคงที่กับห้องสมุดที่สำคัญบางอย่างเช่น OpenSSL บ่อยครั้งที่ OpenSSL เวอร์ชันที่ระบบจัดหานั้นล้าสมัย โดยใช้วิธีการติดตั้งกับรุ่นใหม่ของ OpenSSL นี้คุณสามารถใช้ประโยชน์จากยันต์ที่ทันสมัยเช่นCHACHA20_POLY1305และโปรโตคอลเช่น TLS 1.3 ที่มีอยู่ใน 1.1.1OpenSSL ยิ่งไปกว่านั้นด้วยการรวบรวมไบนารี่ของคุณเองคุณสามารถปรับแต่งฟังก์ชันการทำงานที่ Nginx ของคุณจะให้ซึ่งมีความยืดหยุ่นมากกว่าการติดตั้งไบนารีที่สร้างไว้ล่วงหน้า

ฝากความเห็น

วิธีการติดตั้ง Directus 6.4 CMS บน CentOS 7 LAMP VPS

วิธีการติดตั้ง Directus 6.4 CMS บน CentOS 7 LAMP VPS

เรียนรู้วิธีการติดตั้ง Directus 6.4 CMS บน CentOS 7; ระบบการจัดการเนื้อหา Headless ที่มีความยืดหยุ่นสูงและปลอดภัย

ตั้งค่า Nginx บน Ubuntu เพื่อสตรีมวิดีโอสด HLS

ตั้งค่า Nginx บน Ubuntu เพื่อสตรีมวิดีโอสด HLS

เรียนรู้วิธีการตั้งค่า Nginx บน Ubuntu สำหรับการสตรีมวิดีโอสด HLS ด้วยคำแนะนำที่ชัดเจนและเป็นประโยชน์

การสำรองข้อมูลยอดนิยมด้วย Percona XtraBackup บนแอพ WordPress แบบคลิกเดียว

การสำรองข้อมูลยอดนิยมด้วย Percona XtraBackup บนแอพ WordPress แบบคลิกเดียว

เรียนรู้การใช้ Percona XtraBackup สำหรับการสำรองข้อมูลด้วยวิธีที่เป็นระบบและง่ายดายบน WordPress ออนไลน์ของคุณ

ReactOS: นี่คืออนาคตของ Windows หรือไม่?

ReactOS: นี่คืออนาคตของ Windows หรือไม่?

ReactOS ซึ่งเป็นโอเพ่นซอร์สและระบบปฏิบัติการฟรีพร้อมเวอร์ชันล่าสุดแล้ว สามารถตอบสนองความต้องการของผู้ใช้ Windows ยุคใหม่และล้ม Microsoft ได้หรือไม่? มาหาข้อมูลเพิ่มเติมเกี่ยวกับรูปแบบเก่านี้ แต่เป็นประสบการณ์ OS ที่ใหม่กว่ากัน

AI สามารถต่อสู้กับการโจมตีของแรนซัมแวร์ที่เพิ่มขึ้นได้หรือไม่

AI สามารถต่อสู้กับการโจมตีของแรนซัมแวร์ที่เพิ่มขึ้นได้หรือไม่

การโจมตีของ Ransomware กำลังเพิ่มขึ้น แต่ AI สามารถช่วยจัดการกับไวรัสคอมพิวเตอร์ตัวล่าสุดได้หรือไม่? AI คือคำตอบ? อ่านที่นี่รู้ว่า AI boone หรือ bane

เชื่อมต่อผ่าน WhatsApp Desktop App 24*7

เชื่อมต่อผ่าน WhatsApp Desktop App 24*7

ในที่สุด Whatsapp ก็เปิดตัวแอพเดสก์ท็อปสำหรับผู้ใช้ Mac และ Windows ตอนนี้คุณสามารถเข้าถึง Whatsapp จาก Windows หรือ Mac ได้อย่างง่ายดาย ใช้ได้กับ Windows 8+ และ Mac OS 10.9+

AI จะนำกระบวนการอัตโนมัติไปสู่อีกระดับได้อย่างไร

AI จะนำกระบวนการอัตโนมัติไปสู่อีกระดับได้อย่างไร

อ่านข้อมูลนี้เพื่อทราบว่าปัญญาประดิษฐ์กำลังได้รับความนิยมในหมู่บริษัทขนาดเล็กอย่างไร และเพิ่มโอกาสในการทำให้พวกเขาเติบโตและทำให้คู่แข่งได้เปรียบ

การอัปเดตเสริม macOS Catalina 10.15.4 ทำให้เกิดปัญหามากกว่าการแก้ปัญหา

การอัปเดตเสริม macOS Catalina 10.15.4 ทำให้เกิดปัญหามากกว่าการแก้ปัญหา

เมื่อเร็ว ๆ นี้ Apple เปิดตัว macOS Catalina 10.15.4 การอัปเดตเสริมเพื่อแก้ไขปัญหา แต่ดูเหมือนว่าการอัปเดตทำให้เกิดปัญหามากขึ้นที่นำไปสู่การสร้างเครื่อง Mac อ่านบทความนี้เพื่อเรียนรู้เพิ่มเติม

13 เครื่องมือดึงข้อมูลเชิงพาณิชย์ของ Big Data

13 เครื่องมือดึงข้อมูลเชิงพาณิชย์ของ Big Data

13 เครื่องมือดึงข้อมูลเชิงพาณิชย์ของ Big Data

ระบบไฟล์บันทึกคืออะไรและทำงานอย่างไร

ระบบไฟล์บันทึกคืออะไรและทำงานอย่างไร

คอมพิวเตอร์ของเราจัดเก็บข้อมูลทั้งหมดในลักษณะที่เรียกว่าระบบไฟล์บันทึก เป็นวิธีการที่มีประสิทธิภาพที่ช่วยให้คอมพิวเตอร์สามารถค้นหาและแสดงไฟล์ได้ทันทีที่คุณกดค้นหาhttps://wethegeek.com/?p=94116&preview=true