Setting up SFTP with Nginx

From LemonWiki共筆
Jump to navigation Jump to search

Nginx Directory Permissions and Symbolic Link Configuration Guide


Environment Overview[edit]

  • Using SFTP to upload files to personal directory
  • Personal directory linked to website root via symbolic link
  • Files accessible through public web URL after upload

Example SFTP Upload Process[edit]

  1. Upload file to personal directory: /home/your_user/public_folder/
  2. File automatically reflects in website directory: /usr/share/nginx/html/folder/
  3. Access via URL: http://your_domain/folder/file.png

Configuration Steps[edit]

  1. Verify Symbolic Link
# Check if symbolic link is correct
ls -l /home/your_user/public_folder

Expected output:

lrwxrwxrwx 1 your_user your_user 26 Jan 20 15:00 /home/your_user/public_folder -> /usr/share/nginx/html/folder
  1. Check Directory Structure and Permissions
# Check website root directory
sudo ls -lht /usr/share/nginx/html/
# Check target directory
sudo ls -lht /usr/share/nginx/html/folder/
  1. Check Nginx Configuration
# Check nginx config
sudo nano /etc/nginx/nginx.conf
# Or check site config
sudo nano /etc/nginx/sites-available/default

Basic nginx configuration should include:

server {
    listen 80;
    server_name your_domain;

    root /usr/share/nginx/html;
    index index.html;

    location / {
        try_files $uri $uri/ =404;
    }
}

Troubleshooting of Common Issues[edit]

  • Specific directories return 404 (files exist)
  • Files uploaded via SFTP not accessible via web
  • Nginx error log shows permission issues

Solution: Adjust Permission Settings[edit]

  1. Check Nginx Error Log
sudo tail /var/log/nginx/error.log

Possible error message:

[crit] stat() "[path]/file.png" failed (13: Permission denied)
  1. Set User Directory Permissions
# Ensure user directory is accessible
sudo chmod 755 /home/your_user
  1. Set Website Directory Permissions
# Ensure website directory is accessible
sudo chmod 755 /home/your_user/public_folder
  1. (optional) Set File Permissions
# Set file read permissions
chmod 644 /usr/share/nginx/html/folder/your_file.png

Permission Details[edit]

  • chmod 755 (directories):
    • Owner: read, write, execute (rwx)
    • Group: read and execute (r-x)
    • Others: read and execute (r-x)
  • chmod 644 (files):
    • Owner: read, write (rw-)
    • Group: read (r–)
    • Others: read (r–)

Testing and Verification[edit]

  1. Public URL format: http://your_domain/folder/file.png

  2. If still inaccessible after configuration:

    # Reload nginx configuration
    sudo systemctl reload nginx

Important Notes[edit]

  1. Permission changes take effect immediately, no nginx restart needed
  2. Entire path needs proper execute permissions
  3. New files need correct permissions set
  4. Ensure symbolic links remain intact
  5. Verify files are uploaded to correct location